以编程方式检测 GDB 到达的断点
Programatically detect what breakpoint was reached with GDB
我有一个调试我的应用程序的脚本,它确实设置了 2 个断点。如果我手动调试它,我将能够看到触发了哪个。但是以自动方式进行,我不知道达到了哪个断点,有没有办法写if条件或检测达到哪个断点?
如果香草 gdb 无法实现此功能,但只能使用 python gdb,我很乐意 switch/upgrade 这个过程。
编辑:在汤姆的帮助下我可以拥有
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
然后当断点被触发时,我可以检查变量以了解我在哪里停止了。在纯软件上下文中,这可能会更容易,并且可能不需要从一开始就设置多个断点。这是测试故障可能不规律发生的硬件,那么这种方法应该可以解决问题。
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
事件添加一个侦听器,并专门查找断点停止。
我有一个调试我的应用程序的脚本,它确实设置了 2 个断点。如果我手动调试它,我将能够看到触发了哪个。但是以自动方式进行,我不知道达到了哪个断点,有没有办法写if条件或检测达到哪个断点?
如果香草 gdb 无法实现此功能,但只能使用 python gdb,我很乐意 switch/upgrade 这个过程。
编辑:在汤姆的帮助下我可以拥有
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
然后当断点被触发时,我可以检查变量以了解我在哪里停止了。在纯软件上下文中,这可能会更容易,并且可能不需要从一开始就设置多个断点。这是测试故障可能不规律发生的硬件,那么这种方法应该可以解决问题。
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
事件添加一个侦听器,并专门查找断点停止。