当在变量声明上设置断点时,GDB 获取正确的停止点

标签 gdb breakpoints

给出以下代码片段:

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/

相关文章:

c++ - 将 HW BP 放在哪里以捕获全局变量地址损坏?

c++ - VS 数据断点 : difference between C and C++

.net - 核心 .NET 运行时中的断点?

debugging - 你如何使用 gdb 来调试你的代码?

delphi - 断点命中时单元源代码与代码执行路径不匹配

debugging - (gdb) 获取寄存器指示的内存地址的值

c++ - 重新抛出异常保留回溯

matlab - 如何附加到正在运行的 Matlab 脚本

debugging - 如何使用 gdb 转储 ARM 协处理器寄存器?

c++ - 在启动期间崩溃时如何使用 gdb 调试可执行文件?