如果有一种方法可以在gdb中本地执行此操作,例如加载脚本',则可以随意忽略此问题的emacs部分。
我经常在一个非常高计数的循环中执行以下操作:
因此,如果我可以保存命令以写入缓冲区或文件,并且每次启动gdb时加载并执行该组命令,那么这将使我的生活更轻松。如果我不必进入" y"确认gdb应该在未来库加载时使断点挂起。
如果我可以保存所有当前断点(通过名称而不是地址,因为那些可能会改变),那么超级真棒会是什么。
答案 0 :(得分:2)
您可以将所有命令放在一个文件中,并使用参数-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)
要保存断点,请使用save breakpoints
命令。
(gdb) save breakpoints bp.gdb
Saved to file 'bp.gdb'.
(gdb) quit
$ cat bp.gdb
break write
答案 1 :(得分:1)
答案 2 :(得分:1)
除上述内容外,gdb还会自动加载脚本文件。加载到哪个文件取决于gdb版本,但在较旧版本中,它在当前目录中读取.gdbinit;在较新的那些将读取" $ EXE-gdb.gdb",其中$ EXE是您正在调试的程序的名称。有关所有详细信息,请参阅手册。