当前位置:  开发笔记 > 编程语言 > 正文

让gdb保存断点列表?

如何解决《让gdb保存断点列表?》经验,为你挑选了5个好方法。

好的,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 

aculich.. 196

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

save breakpoints 
  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.

用于source 从文件中还原已保存的断点.



1> aculich..:

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

save breakpoints 
  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.

用于source 从文件中还原已保存的断点.


如果它们来自共享库负载怎么办?默认情况下,它似乎回答N。(是或[n])[回答N;输入不是来自终端]
@bjackfly使用“设置断点挂起”,如[如何在gdb脚本中回答Y](http://stackoverflow.com/questions/11356138/how-to-answer-y-in-gdb-script)中所述,[ gdb:如何使用--command标志在将来的共享库上设置断点](http://stackoverflow.com/questions/100444/gdb-how-to-set-breakpoints-on-future-shared-libraries-with-命令标志)

2> Johannes Sch..:

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

您可以使用日志记录:

(gdb) b main
Breakpoint 1 at 0x8049329
(gdb) info break
Num     Type           Disp Enb Address    What
1       breakpoint     keep y   0x08049329 
(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 
(gdb) q

文件breaks.txt现在包含:

Num     Type           Disp Enb Address    What
1       breakpoint     keep y   0x08049329 

编写一个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


这个答案现在已经超过2年了,所以如果您使用的是更新版本的gdb,它可能已经过时了.从gdb 7.2开始,您现在可以使用`save breakpoints`命令.
+1你的努力是无耻的欣赏

3> Paul Becking..:

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



4> Dan Berindei..:

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

有了brestore那么你就可以恢复保存的断点bsave.



5> 小智..:

扩展到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

之后你有一个有效的命令文件 brestore.gdb

在编译应用程序时,这对我有用-g.

编辑:在Ubuntu Karmic上使用gdb v6.8成功测试.

推荐阅读
刘美娥94662
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有