断点- breakpoints
断点是用来告诉 gdb 在什么地方暂停程序. 一旦程序停止了,就可以查看局部变量,检查堆栈,逐步调试程序的执行.
4.1 如何在某行设置断点?
单文件
如果只有一个文件,那么直接可以使用 break lineNum
的方式进行设置:
(gdb) break 19
Breakpoint 1 at 0x80483f8: file test.c, line 19
多文件
多个文件在设置断点时, 必须指定文件名 break fileName lineNum
(gdb) break test.c:19
Breakpoint 2 at 0x80483f8: file test.c, line 19
4.2 如何给某函数设置断点?
c 函数设置断点
只要传递函数名,就可以给 c 函数设置断点.
(gdb) break func1
Breakpoint 3 at 0x80483ca: file test.c, line 10
设置 c++ 函数的断点
(gdb) break TestClass::testFunc(int)
Breakpoint 1 at 0x80485b2: file cpptest.cpp, line 16.
4.3 如何设置临时断点?
使用 tbreak
就可以设置临时断点.
临时断点只使得程序中断一次, 然后此断点就被移除了.
4.4 如何查看断点列表?
使用命令: info breakpoints
(gdb) info breakpoints
Num Type Disp Enb Address What
2 breakpoint keep y 0x080483c3 in func2 at test.c:5
3 breakpoint keep y 0x080483da in func1 at test.c:10
4.5 如何禁用断点?
使用 disable
命令可以禁用断点. disbale
命令接收一个数字, 这个数字指的是断点列表中的序号.
如下所示, 禁用断点2 后 enable
显示为 n
(gdb) disable 2
(gdb) info breakpoints
Num Type Disp Enb Address What
2 breakpoint keep n 0x080483c3 in func2 at test.c:5
3 breakpoint keep y 0x080483da in func1 at test.c:10
4.6 如何跳过断点?
使用 ignore
, ignore 接收两个参数, 第一个是要跳过的断点序列号, 第二个是要跳过的次数.
(gdb) ignore 2 5
Will ignore next 5 crossings of breakpoint 2.