以编程方式检测GDB达到了什么断点

时间:2018-08-15 16:36:12

标签: gdb gdb-python

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

如果香草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

然后在触发断点时,我可以检查变量以知道我在哪里暂停。在纯软件环境中,这可能会更容易,并且也许一开始就不需要多个断点。这是在测试可能不正常发生故障的硬件,然后这种方法应该可以解决问题。

1 个答案:

答案 0 :(得分: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事件中添加侦听器,并专门查找断点。