让gdb保存一个断点列表?

好的,信息中断列出了断点,但不是以与此问题中的--command重用它们的格式。 gdb是否有一种方法将它们转储到可再次输入的文件中? 有时在调试会话中,有必要在建立一组测试断点后重新启动gdb。

编辑: .gdbinit文件与--command具有相同的问题。 info break命令不会列出命令,而是一张供人类使用的表格。

详细说明,这里是一个来自信息中断的示例:

(gdb) info break
Num Type           Disp Enb Address    What
1   breakpoint     keep y   0x08048517 <foo::bar(void)+7>

从gdb 7.2开始,您现在可以使用save breakpoints命令。

save breakpoints <filename>
  Save all current breakpoint definitions to a file suitable for use
  in a later debugging session.  To read the saved breakpoint
  definitions, use the `source' command.

这个答案已经过时,gdb现在支持直接保存。 看到这个答案。

您可以使用日志记录:

(gdb) b main
Breakpoint 1 at 0x8049329
(gdb) info break
Num     Type           Disp Enb Address    What
1       breakpoint     keep y   0x08049329 <main+16>
(gdb) set logging file breaks.txt
(gdb) set logging on
Copying output to breaks.txt.
(gdb) info break
Num     Type           Disp Enb Address    What
1       breakpoint     keep y   0x08049329 <main+16>
(gdb) q

文件breaks.txt现在包含:

Num     Type           Disp Enb Address    What
1       breakpoint     keep y   0x08049329 <main+16>

编写一个awk脚本,将其转换为对.gdbinit--command文件有用的格式很容易。 或者你甚至可以让脚本发出单独的--eval-command的gdb命令行...

将这个小宏添加到.gdbinit将帮助你做到这一点:

# call with dump_breaks file.txt
define dump_breaks
    set logging file $arg0
    set logging redirect on
    set logging on
    info breakpoints
    set logging off
    set logging redirect off
end

将gdb命令和断点放在.gdbinit文件中,就像您可以在gdb>提示符处键入它们一样,gdb将在启动时自动加载并运行它们。 这是一个按目录的文件,因此您可以为不同的项目使用不同的文件。

链接地址: http://www.djcxy.com/p/24309.html

上一篇: Getting gdb to save a list of breakpoints?

下一篇: Is there a C++ gdb GUI for Linux?