cas*_*der 125 c c++ debugging gdb breakpoints
好的,info break列出了断点,但是没有使用在这个问题中使用--command重用它们的格式.gdb是否有一种方法可以将它们转储到可接受输入的文件中?有时在调试会话中,有必要在构建一组断点进行测试后重新启动gdb.
编辑: .gdbinit文件与--command具有相同的问题.info break命令不列出命令,而是列出供人消费的表.
详细说明,这是一个来自info break的示例:
(gdb) info break Num Type Disp Enb Address What 1 breakpoint keep y 0x08048517 <foo::bar(void)+7>
acu*_*ich 196
从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.
Run Code Online (Sandbox Code Playgroud)
用于source <filename>
从文件中还原已保存的断点.
Joh*_*itb 26
这个答案已经过时了,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
Run Code Online (Sandbox Code Playgroud)
文件breaks.txt现在包含:
Num Type Disp Enb Address What
1 breakpoint keep y 0x08049329 <main+16>
Run Code Online (Sandbox Code Playgroud)
编写一个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
Run Code Online (Sandbox Code Playgroud)
Pau*_*ham 11
将gdb命令和断点放在.gdbinit文件中,就像在gdb>提示符下键入它们一样,gdb将在启动时自动加载并运行它们.这是一个每个目录的文件,因此您可以为不同的项目提供不同的文件.
anon延伸到约翰内斯答案的延伸:
.gdbinit:
define bsave
shell rm -f brestore.txt
set logging file brestore.txt
set logging on
info break
set logging off
# reformat on-the-fly to a valid gdb command file
shell perl -n -e 'print "break $1\n" if /^\d+.+?(\S+)$/g' brestore.txt > brestore.gdb
end
document bsave
store actual breakpoints
end
define brestore
source brestore.gdb
end
document brestore
restore breakpoints saved by bsave
end
Run Code Online (Sandbox Code Playgroud)
有了brestore
那么你就可以恢复保存的断点bsave
.
小智 6
扩展到Johannes的答案:您可以自动将输出重新格式化info break
为有效的gdb命令文件:
.gdbinit:
define bsave
shell rm -f brestore.txt
set logging file brestore.txt
set logging on
info break
set logging off
# reformat on-the-fly to a valid gdb command file
shell perl -n -e 'print "break $1\n" if /^\d+.+?(\S+)$/g' brestore.txt > brestore.gdb
end
document bsave
store actual breakpoints
end
Run Code Online (Sandbox Code Playgroud)
之后你有一个有效的命令文件 brestore.gdb
在编译应用程序时,这对我有用-g
.
编辑:在Ubuntu Karmic上使用gdb v6.8成功测试.
将以下内容放入~/.gdbinit中,将bsave和brestore定义为保存和恢复断点的 GDB 命令。
define bsave
save breakpoints ~/.breakpoints
end
define brestore
source ~/.breakpoints
end
Run Code Online (Sandbox Code Playgroud)