【问题标题】:execute multiple gdb commands in emacs在 emacs 中执行多个 gdb 命令
【发布时间】:2015-04-13 11:36:30
【问题描述】:

如果有办法在 gdb 中本地执行此操作,例如“加载脚本”,请随意忽略此问题的 emacs 部分。

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

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

因此,如果我可以保存要写入缓冲区或文件的命令,并在每次启动 gdb 时加载并执行该组命令,那会让我的生活变得更轻松。如果我不必输入“y”来确认 gdb 应该使断点在未来的库加载时处于挂起状态,则可以加分。

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

【问题讨论】:

    标签: c++ emacs gdb


    【解决方案1】:

    我认为你可以通过set history save 保存命令历史记录

    同类型问题的正确解释见以下链接

    How can I make gdb save the command history?

    【讨论】:

      【解决方案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
      

      【讨论】:

      • 谢谢,这似乎很有帮助。现在玩它。
      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-03-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多