我使用带有 -x 参数的 gdb 进行调试,而不必在每个断点处以交互方式继续。
[root@StackOverflow.com] $ cat gdb_cmds_01
b SomeSourceFile.cpp:123
commands
bt
cont
end
Run Code Online (Sandbox Code Playgroud)
然后我附加到一个在执行中使用 SomeSourceFile.cpp 的进程:
[root@StackOverflow.com] $ gdb -p 'pidof SomeRunningProgram' -x gdb_cmds_01
GNU gdb (GDB) Red Hat Enterprise Linux (7.2-92.el6)
...
<GDB outputs a set S of backtraces as instructed by gdb_cmds_01>
Run Code Online (Sandbox Code Playgroud)
现在,让 SomeSourceFile.cpp:123 包含如下一行:
if (foo(person, &place, *time) == "Alice") { ... <do stuff > ... }
Run Code Online (Sandbox Code Playgroud)
再假设我想在SomeSourceFile打破:123只有回归foo(...)是不是等于“爱丽丝”。
基于: 如何在 GDB 中检查函数的返回值?,我知道gdb可以检查函数的返回值。
而https://sourceware.org/gdb/onlinedocs/gdb/Break-Commands.html告诉我,我可以检查一个变量非交互的价值:
<...>
例如,这里是如何使用断点命令在 x 为正数时将 x …