gdb使用技巧

gdb调试技巧

gdb调试技巧

文章目录

  • gdb调试技巧
    • 多线程调试
    • 源文件显示
    • 条件断点
    • 设置变量
    • x命令

多线程调试

在工程中,经常需要写多线程的程序,如果这些多线程的程序出现了问题,需要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 以字符串输出

你可能感兴趣的:(后端开发)