如果有一种方法可以在 gdb 中本地执行此操作,例如“加载脚本”,那么请忽略此问题的 emacs 部分。
我经常在一个相当高的循环中执行以下操作:
- 启动 gdb(如果有帮助,在 emacs 中)。
- 设置几个断点(每次都是相同的断点)。通常必须输入“y”我想在将来的共享库加载时设置断点。
- 设置一些观察点(相同的观察点)
- 调试一段时间。
- 关闭 gdb。
- 转到 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/