给出以下代码片段:
1: int main(int argc, char **argv) {
2: int i;
3:
4: i = i + 1;
5:
6: ...
7:
8: }
当您在上述代码中的第 2: 行设置断点并在 GDB 中开始调试时,执行实际上在第 4: 行停止。这当然是正确的行为,但是在调试之前,在创建断点之后,是否可以查询 GDB 以获得正确的停止点编号。
最佳答案
(gdb) b 2
Breakpoint 1 at 0x400547: file main.cpp, line 2.
这是 info b
显示的内容:
(gdb) info b $bpnum
Num Type Disp Enb Address What
1 breakpoint keep y 0x0000000000400547 in main(int, char**) at main.cpp:2
您需要对“地址”列中的地址执行此操作:
(gdb) info line *0x0000000000400547
Line 4 of "main.cpp" starts at address 0x400547 <main(int, char**)+11> and ends at 0x400550 <main(int, char**)+20>.
如您所见,真正的断点位于“main.cpp 的第 4 行”
关于当在变量声明上设置断点时,GDB 获取正确的停止点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13821229/