0

我有一个调试我的应用程序的脚本,它确实设置了 2 个断点。如果我要手动调试它,我将能够看到哪个被触发了。但是以自动方式进行,我不知道到达了哪个断点,有没有办法编写 if 条件或其他东西来检测到达哪个断点?

如果 vanilla gdb 无法使用此功能,而只能使用 python gdb,我将很乐意切换/升级该过程。

编辑:在汤姆的帮助下,我可以拥有

break main
commands
  set $gdb_breakpoint=1
end

break main.cpp:4053
commands
  set $gdb_breakpoint=2
end

break fault_handler.cpp:55
commands
  set $gdb_breakpoint=3
end

break unit_tests_complete
commands
  set $gdb_breakpoint=4
end

然后当断点被触发时,我可以检查变量以了解我在哪里停止。在纯软件上下文中,这可能更容易,并且可能一开始就不需要多个断点。这是在测试可能不规律发生故障的硬件,那么这种方法应该可以解决问题。

4

1 回答 1

2

gdb CLI 提供了一个commands命令,可用于将其他 gdb 命令附加到断点。例如:

(gdb) break main
Breakpoint 1 at 0x40ce90: file ../../binutils-gdb/gdb/gdb.c, line 25.
(gdb) commands 1
Type commands for breakpoint(s) 1, one per line.
End with a line saying just "end".
>print "hi"
>end

... 将安排在断点被命中时打印“hi”。

如果您更喜欢使用 Python,那么您可以为gdb.events.stop事件添加一个侦听器,并专门查找断点停止。

于 2018-08-15T20:58:25.037 回答