参考: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中描述的脚本了
该方法的好处是,可以离线编辑脚本,最大程度减少因输入调试命令而暂停程序服务的时间。