gdb使用技巧

gdb调试技巧

gdb调试技巧

多线程调试

在工程中,经常需要写多线程的程序,如果这些多线程的程序出现了问题,需要gdb的时候,我们需要用哪些命令呢?

  • info thread 查看当前进程的线程信息,显示ID;
  • thread ID 切换调试的线程为指定ID的线程;
  • break test.cpp:55 thread all 在test.cpp文件第55行处设置断点,所有的线程都启作用;
  • set scheduler-locking off|on|step
    • off 不锁定任何线程,也就是所有线程都执行,这是默认值;
    • on 锁定其他线程,只有当前线程可以执行;

源文件显示

有些时候,我们在gdb的时候,无法显示源文件。

  • directory 设置源文件路径

条件断点

  • break line-or-function if expr 例如:break 666 if testsize==100

设置变量

有时候,在调试程序时,我们不单单只是查看运行时的变量,我们还可以直接设置程序中的变量,以模拟一些很难在测试中出现的情况,比较一些出错,或是switch的分支语句。使用set命令可以修改程序中的变量。

另外,你知道gdb中也可以有变量吗?就像shell一样,gdb中的变量以$开头,比如你想打印一个数组中的个个元素,你可以这样:

  • set $i = 0

x命令

  • x/x 以十六进制输出
  • x/d 以十进制输出
  • x/c 以单字符输出
  • x/i 反汇编 – 通常,我们会使用 x/10i $ip-20 来查看当前的汇编($ip是指令寄存器)
  • x/s 以字符串输出
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值