gdb是C/C++程序员必备的专业技能,工作中gdb最常用的场景有两个,一个是分析core文件,另一个是调试程序。
分析core文件的方法如下:
1、gdb 程序名 core文件名
2、bt或where命令查看堆栈信息。
3、进入某个栈:f N,f是frame的缩写,N是栈号,如0、1、2、3...
进入到某个栈后,才能通过p命令查看这个栈的临时变量,否则只能查看全局变量。
例如a.out程序core产生了core文件core-a.out-12345,gdb方法如下:
gdb a.out core-a.out-12345
bt(或者where)
f 3,进入第3帧
调试一个正在运行的程序使用gdb -p PID命令,PID即程序的pid。
需要注意的是,gdb调试正在运行的程序会导致程序挂起,因此请记住不要gdb调试正在运行的在线服务。
设置断点的方式有很多种,最常见的有两种:一是设置程序运行到源代码的某一行,二是设置程序运行到某个函数。
设置程序运行到某一行,通过“文件名:行号”的形式:
b test.cpp:100
设置程序运行到某个函数,通过“名字空间::函数名”的形式:
gdb namespace_a::func
查看断点:info b
删除断点:d N,d是delete的缩写,N是断点的编号