gdb 调试中使用脚本

参考:http://johnnyjacob.wordpress.com/2009/07/07/gdb-scripting-short-article-for-internal-magazine/


如果想知道某个断点是否被执行到了,快速的做法如下:

gdb调试下,设置断点,加command,内容是c (continue),例如:

(gdb) b AppStat.cpp:1300
(gdb) commands
> c
> end
(gdb) c
当程序执行到断点时,gdb不会停在断点,而是打印下面的信息,然后继续执行下去
Breakpoint 1, CAppStat::GetStat (this=0x7f7879085140, aStat=...) at AppStat.cpp:1300
1300    in AppStat.cpp


当然,也可以在commands命令序列中加入更多的命令,如

(gdb) b AppStat.cpp:1300
(gdb) commands
> p aStat
> c
> end
(gdb) c
这样,当程序执行到断点时,除了输出断点位置信息外,还会输出 aStat 的内容,如
Breakpoint 1, CAppStat::GetStat (this=0x7f7879085140, aStat=...) at AppStat.cpp:1300
1300    in AppStat.cpp
$3 = (string &) @0x7fff35478030: {<std::basic_string<char, std::char_traits<char>, std::allocator<char> >> = {
    static npos = <optimized out>,
    _M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
      _M_p = 0x7f78dcd0d018 "This is the information of aStat ..."...}}, <No data fields>}

【还有一种做法值得推荐】

我们编辑一个gdb调试脚本文件/home/yasi/p1,内容如下:

b AppStat.cpp:1300
commands
p aStat
c
end
当gdb attach到要调试的进程上以后,在gdb环境下执行

source /home/yasi/p1
就能设置上p1中描述的脚本了


该方法的好处是,可以离线编辑脚本,最大程度减少因输入调试命令而暂停程序服务的时间。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值