
2020年腾讯云“ 6.18”活动开始! ! ! (再次出现巨大折扣!4核8G,5M带宽1999元/ 3年),
地址:
2020年阿里云的最低价格产品入口,包括优惠券(新老用户均可享受折扣)
地址:
Linux gdb调试单独的多线程调试线程2011年1月26日,星期三,下午6:10 1.多线程调试多线程调试可能是最受欢迎的. 实际上,重要的是以下命令: info thread查看当前进程的线程. 线程

为在file.c的第100行通过的所有线程设置断点. 设置调度程序锁定|在|步骤,这是最常问到的. 当使用step或continue命令调试当前已调试的线程时,其他线程也将同时执行. 如何只执行已调试的程序?通过此命令可以实现此需求. off不会锁定任何线程,即所有线程都将执行,这是默认设置. on仅执行当前调试的程序. step步进时linux 多线程调试,除了下一个传递函数的情况(熟悉情况的人可能知道这实际上是设置断点并继续的行为)之外,仅当前线程将执行. 其次,调试宏有很多问题. 在GDB下,我们无法打印宏定义,因为宏是预先编译的. 但是我们仍然有一种调试宏的方法,这需要GCC的配合. 在GCC中编译程序时,请添加-ggdb3参数,以便您可以调试宏. 此外,您可以使用以下GDB宏调试命令来查看相关的宏. info宏-您可以检查在哪个文件中引用了此宏以及该宏的定义. 宏-您可以看到宏的扩展方式. 三,源文件这个问题也问了很多,太多的朋友说找不到源文件. 在这里,我想提醒您进行以下检查: 编译器程序员是否添加了-g参数以包含调试信息. 路径设置是否正确. 使用GDB directory命令设置源文件目录. 下面给出了调试的示例/ bin / ls(在Ubuntu下)1234567891011121314151617181920 $ apt-get sourcecoreutils $ sudoapt-get installcoreutils-dbgsym $ gdb / bin / lsGNU gdb(GDB)7.1-ubuntu(gdb)列表main1192
ls.c: 没有这样的文件目录.inls.c(gdb)目录〜/ src / coreutils-7.4 / src /搜索的源目录: /home/hchen/src/coreutils-7.4:$cdir:$cwd( gdb)列表main1192
} 1193
} 11941195
int1196
main(int argc,char ** argv)1197

{1198
int i; 1199
struct待定* thispend; 1200
int n_files; 1201 4.条件断点条件断点的语法为: break
[where]如果[condition],此断点确实有用. 特别是在循环或递归中,或监视变量. 请注意,此设置在GDB中,但是GDB将在每次传递断点时帮助您检查是否满足条件. 五,命令行参数有时候,我们需要调试的程序需要命令行参数,很多朋友都不知道如何设置调试程序的命令行参数. 实际上,有两种方法: gdb环境中gdb命令行的-args参数set args命令. 6. gdb的变量有时,在调试程序时,我们不仅可以在运行时检查变量,还可以直接在程序中设置变量以模拟某些难以在测试中出现的情况,比较某些错误,或者是switch的分支语句. 使用set命令来修改程序中的变量. 另外,您知道gdb中也可以有变量
推荐: GDB多线程调试

GDB多线程调试基本命令简介和问题解决方案
teawater@gmail.com
我与GDB多线程调试没有太多联系. 最近,由于工作,我有了一些联系. 让我们简单地记录一下.
第一
?就像外壳一样,gdb中的变量以$开头. 例如,如果要打印数组中的元素,可以执行以下操作: 12345(gdb)set $ i = 0
(gdb)p a [$ i ++]

...
#然后完全按下Enter键. 当然,这里仅是一个示例,显示程序的变量和gdb的变量可以交互. 七,x命令也许您喜欢使用p命令. 因此,当您不知道变量名时,您可能会感到茫然,因为p命令始终需要变量名. x命令用于查看内存. 您可以在gdb的“帮助x”中查看其帮助. x / x以十六进制输出x / d以十进制x / c输出以单个字符x / i
反汇编-通常,我们将使用x / 10i $ ip-20查看当前汇编($ ip是指令寄存器)x / s作为字符串输出. 8.命令命令一些朋友问我如何自动调试. 在这里,我们向所有人介绍命令命令,这是一个简单的理解,它是打包一组gdb命令的,有点像文字处理软件的“宏”. 下面是一个示例: 12345678910(gdb)breakfuncBreakpoint 1 at 0x3475678: filetest.c,第12行. (gdb)command1命中断点1时键入的命令,每行一个. 结尾的行仅表示“ end”. >打印arg1 > print arg2> print arg3> end(gdb)到达断点时,我们自动执行命令中的三个命令并打印出func的三个参数值. (全文结尾)设置核心环境uname -a查看机器参数ulimit -a查看默认参数ulimit -c 1024
将核心文件大小设置为1024ulimit -c unlimit将核心文件大小设置为无限
如果是多线程转储,则大多是段错误,通常涉及非法内存读写. 可以通过这种方式进行处理,请使用以下命令打开系统开关,以便它死后可以生成核心文件.
ulimit -c无限线程调试命令(gdb)info线程显示所有当前可调试的线程,每个线程都有一个由GDB分配的ID,稍后将在操作线程时使用该ID. 前面带有*的是当前正在调试的线程. (gdb)线程ID将当前调试的线程切换到具有指定ID的线程. (gdb)线程应用ID1 ID2命令让一个或多个线程执行GDB命令命令. (gdb)线程应用所有命令让所有调试的线程执行GDB命令命令. (gdb)设置调度程序锁定|在|估计实际使用太多线程进行调试的任何人都可以发现,使用step或continue命令调试当前已调试的线程时,也会同时执行其他线程. 调试程序如何?通过此命令可以实现此需求. off不会锁定任何线程,即所有线程都将执行,这是默认设置. on仅执行当前调试的程序. step步进时linux 多线程调试,除了下一个传递函数的情况(熟悉情况的人可能知道这实际上是设置断点然后继续执行的行为)之外,仅当前线程将执行. //显示线程堆栈信息(gdb)bt查看所有调用堆栈(gdb)f 3呼叫框层次结构(gdb)i Locals
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-225332-1.html
中国统一的日子也就到了