断点- breakpoints

断点是用来告诉 gdb 在什么地方暂停程序. 一旦程序停止了,就可以查看局部变量,检查堆栈,逐步调试程序的执行.

4.1 如何在某行设置断点?

单文件

如果只有一个文件,那么直接可以使用 break lineNum 的方式进行设置:

  1. (gdb) break 19
  2. Breakpoint 1 at 0x80483f8: file test.c, line 19

多文件

多个文件在设置断点时, 必须指定文件名 break fileName lineNum

  1. (gdb) break test.c:19
  2. Breakpoint 2 at 0x80483f8: file test.c, line 19

4.2 如何给某函数设置断点?

c 函数设置断点

只要传递函数名,就可以给 c 函数设置断点.

  1. (gdb) break func1
  2. Breakpoint 3 at 0x80483ca: file test.c, line 10

设置 c++ 函数的断点

  1. (gdb) break TestClass::testFunc(int)
  2. Breakpoint 1 at 0x80485b2: file cpptest.cpp, line 16.

4.3 如何设置临时断点?

使用 tbreak 就可以设置临时断点.
临时断点只使得程序中断一次, 然后此断点就被移除了.

4.4 如何查看断点列表?

使用命令: info breakpoints

  1. (gdb) info breakpoints
  2. Num Type Disp Enb Address What
  3. 2 breakpoint keep y 0x080483c3 in func2 at test.c:5
  4. 3 breakpoint keep y 0x080483da in func1 at test.c:10

4.5 如何禁用断点?

使用 disable 命令可以禁用断点. disbale 命令接收一个数字, 这个数字指的是断点列表中的序号.
如下所示, 禁用断点2 后 enable 显示为 n

  1. (gdb) disable 2
  2. (gdb) info breakpoints
  3. Num Type Disp Enb Address What
  4. 2 breakpoint keep n 0x080483c3 in func2 at test.c:5
  5. 3 breakpoint keep y 0x080483da in func1 at test.c:10

4.6 如何跳过断点?

使用 ignore , ignore 接收两个参数, 第一个是要跳过的断点序列号, 第二个是要跳过的次数.

  1. (gdb) ignore 2 5
  2. Will ignore next 5 crossings of breakpoint 2.