c++ - 在 emacs 中执行多个 gdb 命令

标签 c++ emacs gdb

如果有一种方法可以在 gdb 中本地执行此操作,例如“加载脚本”,那么请忽略此问题的 emacs 部分。

我经常在一个相当高的循环中执行以下操作:

  1. 启动 gdb(如果有帮助,在 emacs 中)。
  2. 设置几个断点(每次都是相同的断点)。通常必须输入“y”我想在将来的共享库加载时设置断点。
  3. 设置一些观察点(相同的观察点)
  4. 调试一段时间。
  5. 关闭 gdb。
  6. 转到 1.

因此,如果我可以保存写入缓冲区或文件的命令,并在每次启动 gdb 时加载并执行该组命令,那将使我的生活变得更加轻松。如果我不必输入“y”来确认 gdb 应该在未来的库加载时设置断点,那么奖励积分。

如果我可以保存所有当前断点(按名称而不是按地址,因为那些可能会更改),那将是非常棒的。

最佳答案

您可以将所有命令放在一个文件中,并使用参数 -x/path/to/file 调用 gdb。任何问题的答案都将默认为安全...

$ cat init.gdb
break write

$ gdb -q -x init.gdb a.out
Reading symbols from a.out...done.
Function "write" not defined.
Make breakpoint pending on future shared library load? (y or [n]) [answered N;
    input not from terminal]
(gdb)

但在这种情况下,您希望答案为 y。通常可以设置一个 gdb 变量来覆盖默认选择。在这里,它是 set breakpoint pending on

$ cat init2.gdb
set breakpoint pending on
break write

$ gdb -q -x init2.gdb a.out
Reading symbols from a.out...done.
Function "write" not defined.
Breakpoint 1 (write) pending.
(gdb) 

要保存断点,请使用保存断点命令。

(gdb) save breakpoints bp.gdb
Saved to file 'bp.gdb'.
(gdb) quit
$ cat bp.gdb
break write

关于c++ - 在 emacs 中执行多个 gdb 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28482467/

相关文章:

c++ - 调用 operator new 没有匹配的函数

c++ - QtWebKit 如何处理登录提示

c++ - 内联汇编的 Clang 错误

emacs - 从代码块的结果创建组织表

c - 如何检测堆栈溢出点

eclipse - 无法通过 Eclipse 在 Genymotion 中调试 native Android 应用程序

c++ - 如何将二维数组传递给C++中的函数

regex - emacs 无法打开加载文件 make-regexp

python - python 程序的 emacs 语法高亮问题