在emacs中执行多个gdb命令

时间:2015-02-12 16:19:49

标签: c++ emacs gdb

如果有一种方法可以在gdb中本地执行此操作,例如加载脚本',则可以随意忽略此问题的emacs部分。

我经常在一个非常高计数的循环中执行以下操作:

  1. 启动gdb(如果有帮助,请使用emacs)。
  2. 设置多个断点(每次都使用相同的断点)。通常必须输入" y"我想在未来的共享库加载中使断点挂起。
  3. 设置一些观察点(相同的观察点)
  4. 调试一段时间。
  5. 关闭gdb。
  6. 转到1。
  7. 因此,如果我可以保存命令以写入缓冲区或文件,并且每次启动gdb时加载并执行该组命令,那么这将使我的生活更轻松。如果我不必进入" y"确认gdb应该在未来库加载时使断点挂起。

    如果我可以保存所有当前断点(通过名称而不是地址,因为那些可能会改变),那么超级真棒会是什么。

3 个答案:

答案 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)

我认为您可以按set history save

保存命令历史记录

以下链接

给出了相同类型问题的正确解释

How can I make gdb save the command history?

答案 2 :(得分:1)

除上述内容外,gdb还会自动加载脚本文件。加载到哪个文件取决于gdb版本,但在较旧版本中,它在当前目录中读取.gdbinit;在较新的那些将读取" $ EXE-gdb.gdb",其中$ EXE是您正在调试的程序的名称。有关所有详细信息,请参阅手册。