gdb调试断点的保存

今天使用gdb调试了一整天,在好多关键的地方添加了断点,快要下班的时候,因为要关闭远程连接,为了便于明天继续测试,我想把所有的断点都 保存下来。但是因为断点太多了,使用“info b”虽然可以查看到断点,但是,断点的位置得自己找出来,然后保存,感觉有点麻烦。

(gdb) info b
Num     Type           Disp Enb Address            What
1       breakpoint     keep y   0x000000000040336d in main(int, char**) at RecvMain.cpp:290
        breakpoint already hit 1 time
2       breakpoint     keep y   0x00002aaab049c7ef in CRealCreditEventAb::LoopEventCreditCtrl(int)

……

上网想查看一下gdb是否有保存断点的方式,不过值搜到了“python 保存断点”的方法,看到使用“save breakpoints”命令,所以我来到gdb调试环境,查看了gdb是否有参数“save”,如下:

(gdb) save
"save" must be followed by the name of a save subcommand.
List of save subcommands:

save breakpoints -- Save current breakpoint definitions as a script
save gdb-index -- Save a
save tracepoints -- Save current tracepoint definitions as a script

Type "help save" followed by save subcommand name for full documentation.
Type "apropos word" to search for commands related to "word".
Command name abbreviations are allowed if unambiguous.
(gdb)

看到的确有“save breakpoints ”,禁不住窃喜,使用help查看该命令的含义:

(gdb) help save breakpoints
Save current breakpoint definitions as a script.
This includes all types of breakpoints (breakpoints, watchpoints,
catchpoints, tracepoints).  Use the 'source' command in another debug
session to restore them.
(gdb)

看了一下解释,果然可以满足我的要求——把所有的断点进行保存,保存到“gdb.cfg”中,如下:

(gdb) save breakpoints gdb.cfg
Saved to file 'gdb.cfg'.
(gdb) ^Z
[1]+  Stopped                 gdb RecvMain
[[email protected] creditctl]$vi gdb.cfg 

  1 break main
  2 break CRealCreditEventAb::LoopEventCreditCtrl
  3 break AssignStopTask
……

最前面的是显示的行号,可以看到,我的断点的确保存了。

我又仔细看了一下上面的对于“save breakpoints”的注释,在另一个gdb session中可以使用“source”命令restore(恢复,还原)它们(断点)。测试一下:先删除所有断点,然后使用source恢复所有保存的断点,如下:

(gdb) D                                                #删除所有断点
Delete all breakpoints? (y or n) y
(gdb) info b                                           #查看断点
No breakpoints or watchpoints.
(gdb) source gdb.cfg                                   #加载断点
Breakpoint 9 at 0x40336d: file RecvMain.cpp, line 290.
Breakpoint 10 at 0x2aaab049c7ef: file CRealCreditEventAb.cpp, line 80.
……

(gdb) info b                                           #查看断点
Num     Type           Disp Enb Address            What
9       breakpoint     keep y   0x000000000040336d in main(int, char**) at RecvMain.cpp:290
10      breakpoint     keep y   0x00002aaab049c7ef in CRealCreditEventAb::LoopEventCreditCtrl(int)
                                               at CRealCreditEventAb.cpp:80
……

多看一眼说明文档,又学到一个新的技巧,记录下来,希望对大家有帮助。

扩展阅读:http://ccshell.com/archives/92.html  python 保存断点

gdb调试断点的保存

时间: 2024-10-30 07:55:58

gdb调试断点的保存的相关文章

gdb调试命令

本篇摘自互联网,纯属自己学习笔记,然分享给看到我的博客的人们. 用GDB调试程序 GDB是一个强大的命令行调试工具.大家知道命令行的强大就是在于,其可以形成执行序列,形成脚本.UNIX下的软件全是命令行的,这给程序开发提代供了极大的便利,命令行软件的优势在于,它们可以非常容易的集成在一起,使用几个简单的已有工具的命令,就可以做出一个非常强大的功能. 于是UNIX下的软件比Windows下的软件更能有机地结合,各自发挥各自的长处,组合成更为强劲的功能.而Windows下的图形软件基本上是各自为营,

GDB 调试解析

GDB(GNU Debugger)是一个强大的命令行调试工具.大家知道命令行的强大就是在于,其可以形成执行序 列,形成脚本.UNIX下的软件全是命令行的,这给程序开发提代供了极大的便利,命令行软件的优势在于,它们可以非常容易的集成在一起,使用几个简单的已有工具的命令,就可以做出一个非常强大的功能. GDB主要帮忙你完成下面四个方面的功能: (1).启动你的程序,可以按照你的自定义的要求随心所欲的运行程序. (2).可让被调试的程序在你所指定的调置的断点处停住.(断点可以是条件表达式) (3).当

第七课 GDB调试 (下)

1序言: 通过前面一节第六课 GDB调试 (下)文章,可以掌握理解了gdb调试:怎么启动.运行,打断点.查看变量.甚至改变变量等的知识,今天来大概讲解下调试bug的类型. 2知识点: 2.1 就像之前所说的没有任何一个程序员敢打包票自己写的代码是没任何bug,bug总会有意无意的出现在我们眼前,当程序运行结果于我们预期结果不一样的时候这时候我们就应该调试,总的来说bug分为:语法错误.逻辑错误.硬件异常: 3原理: 3.1 语法错误:一般情况下出现在编译的时候会有提示编译错误这时候我们就可以马上

GDB调试汇编堆栈过程分析

首先我自己编译个代码,无非就是调用函数吗. 在这里我先大致手绘了一张整个程序在存储空间的汇编代码(根据P239上的汇编代码) 然后对其进行汇编.进入gdb,获得main的汇编代码. 给 sum 设置断点 获取sum的汇编代码 首先我分析一下该汇编代码: 按照书上P238所讲的,首先会初始化&esp和%ebp,这里并没有看到,我猜测是因为我们所设置的断电是给main函数的,所以只显示执行main时的汇编代码. 初始化栈指针和帧指针之后,就执行call main,然后%ebp入栈,%ebp保存%es

vi/vim使用进阶: 在VIM中使用GDB调试 – 使用vimgdb

vi/vim使用进阶: 在VIM中使用GDB调试 – 使用vimgdb << 返回vim使用进阶: 目录 本节所用命令的帮助入口: :help vimgdb 在UNIX系统最初设计时,有一个非常重要的思想:每个程序只实现单一的功能,通过管道等方式把多个程序连接起来,使之协同工作,以完成更强大的功能.程序只实现单一功能,一方面降低了程序的复杂性,另一方面,也让它专注于这一功能,把这个功能做到最好.就好像搭积木一样,每个积木只提供简单的功能,但不同的积木垒在一起,就能搭出大厦.汽车等等复杂的东西.

GDB Core,gdb 调试大全,core文件调试

编译: gcc -g -o hello hello.c gdb 调试: 基本 gdb 命令. 命 令 描 述 小结:常用的gdb命令 backtrace 显示程序中的当前位置和表示如何到达当前位置的栈跟踪(同义词:where) breakpoint 在程序中设置一个断点 cd 改变当前工作目录 clear 删除刚才停止处的断点 commands 命中断点时,列出将要执行的命令 continue 从断点开始继续执行 delete 删除一个断点或监测点:也可与其他命令一起使用 display 程序停

GDB调试 (七)

改变程序的执行——————— 一旦使用GDB挂上被调试程序,当程序运行起来后,你可以根据自己的调试思路来动态地在GDB中更改当前被调试程序的运行线路或是其变量的值,这个强大的功能能够让你更好的调试你的程序,比如,你可以在程序的一次运行中走遍程序的所有分支.        一.修改变量值 修改被调试程序运行时的变量值,在GDB中很容易实现,使用GDB的print命令即可完成.如:            (gdb) print x=4        x=4这个表达式是C/C++的语法,意为把变量x的

gdb调试之重要命令

一.GDB改变程序的执行 一旦使用GDB挂上被调试程序,当程序运行起来后,你可以根据自己的调试思路来动态地在GDB中更改当前被调试程序的运行线路或是其变量的值,这个强大的功能能够让你更好的调试你的程序,比如,你可以在程序的一次运行中走遍程序的所有分支. 修改变量值 修改被调试程序运行时的变量值,在GDB中很容易实现,使用GDB的print命令即可完成.如: (gdb) print x=4 x=4这个表达式是C/C++的语法,意为把变量x的值修改为4,如果你当前调试的语言是Pascal,那么你可以

GDB调试器使用总结

概述:GDB是linux下调试程序的神器,做为linux程序员,如果不能熟练的使用GDB进行程序调试,那将是很失败的事情.强大的功能使GDB的使用也变得比较复杂,如果是初学者肯定会比繁杂的命令吓到.下面是整理的一些我认为会比较有帮助的部分.下文中以">"开头的命令是linux的shell命令,以"(GDB)"开头的则是GDB内部命令. 0.转储功能(core dump): (1).开启转储功能:首先用 >ulimit -c 查看是否开启转储功能,如果命令