【问题标题】:GDB Getting the correct stop point when breakpoint set on variable declarationGDB在变量声明上设置断点时获取正确的停止点
【发布时间】:2012-12-11 13:14:46
【问题描述】:

给定以下代码 sippet:

1:    int main(int argc, char **argv) {
2:       int i;
3:    
4:       i = i + 1;
5:    
6:       ...
7:    
8:    }

当您在第 2 行设置断点时:在上述代码中并在 GDB 中开始调试时,执行实际上在第 4 行停止:。这当然是正确的行为,但是否可以在创建断点之后调试之前查询 GDB 以获取正确的停止点编号......

【问题讨论】:

    标签: gdb breakpoints


    【解决方案1】:
    (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 行”上的真正断点

    【讨论】:

    • 还不错,没想到会这样挠痒痒。 +1。无论如何,我会留下我的答案,因为我认为这个意图更有可能设置一个观察点。
    【解决方案2】:

    你可能正在寻找

    info b
    

    info breakpoints 的缩写)并在第一个“列”中给出数字。

    如果您想在变量被修改时中断,请改用观察点。 GDB 将始终在断点之后最近的可执行代码行处中断(如果按行设置)。变量声明不是可执行代码,因此将使用下一行(非空)上的赋值。

    如果您正在寻找的是确切地知道它在哪一行停止,我认为 GDB 提示符上没有这样的东西。但是,您仍然可以使用观察点并使用 commands 自定义中断点和观察点发生的情况。


    从 skwllsp 写的评论来看,它的外观如下:

    (gdb) info b
    Num    Type       Disp  Enb Address            What
    1      breakpoint keep  y   0x0000000000400547 in main(int, char**) at main.cpp:2
    

    这表示有一个断点 (1),它已启用,它也会向您显示该行。处置 (Disp) 和启用 (Enb) 很有用,但请阅读手册以获得正确的描述。我也可以热烈推荐 Nostarch 的《调试艺术》一书。

    【讨论】:

    • 你写的好像不行:(gdb) info b Num Type Disp Enb Address What 1 breakpoint keep y 0x0000000000400547 in main(int, char**) at main.cpp:2
    • @skwllsp:将其添加到答案中。谢谢。
    • 据我了解@user1883815 想在这种情况下查看 main.cpp:4 并且您的命令仍然显示 main.cpp:2
    • @skwllsp:GDB 提示中没有这样的东西,因为我也尝试在我的解释中传达。我也在给他选择他更可能想要的东西。如果 declaration 本来就不是一个观察点,为什么会有人在它上设置一个 bpx?
    猜你喜欢
    • 2012-03-11
    • 1970-01-01
    • 2013-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-15
    相关资源
    最近更新 更多