gdb脚本:在选定的断点处执行命令

Lor*_* Bo 33 scripting gdb breakpoints

我想在gdb脚本中预定义一些断点,并在这些断点处调用一些特殊命令,然后自动继续执行程序.所以,理想情况下,我想要一个像下面这样的gdb脚本:

b someFunction
...
if breakpoint from above reached do:
  print var1
  call someOtherFunction
  continue
done
Run Code Online (Sandbox Code Playgroud)

另外一个不幸的事实是,我不能依赖python接口来使用断点,因为我目前工作的服务器上的gdb版本太旧了!

bor*_*ble 42

您应该查看该command命令,该命令允许您在命中断点时添加gdb命令.请参阅gdb手册的断点命令列表部分.

例如:

break someFunction
commands
print var1
end
Run Code Online (Sandbox Code Playgroud)

当断点打开时someFunction,将自动执行print var1.

  • 谢谢,这才是关键!还有一点需要注意:如果您使用这样的命令有大量输出,并且不希望每次它到达终端底部时都停止它(因为那时gdb会询问"Type <return>继续,或者q <return>退出"),只是在gdb或你的脚本中声明"设置分页". (12认同)
  • 请注意,在固定https://sourceware.org/bugzilla/show_bug.cgi?id=10079之前,这在非交互模式(例如批处理或MI模式)下不起作用 (2认同)
  • 附加说明:以 `silent` 和 `cont` 开始和结束你的命令列表:`silent` 跳过 GDB 在断点命中时显示的通常输出,`cont` 跳过进入交互式提示;播放命令列表后继续。有些人称之为 _tracepoint_,即只跟踪变量的值而不停止执行。 (2认同)
  • @VramVardanian `commands` 将断点编号列表作为参数。使用“info b”列出断点。 (2认同)