GDB 是GNU开源组织发布的一个强大的UNIX下的程序调试工具。
一.GDB命令
gdb基本命令列表:
命令详细解释如下:
命令 |
解释 |
示例 |
file <文件名> |
加载被调试的可执行程序文件。 |
(gdb) file gdb-sample |
r |
Run的简写,运行被调试的程序。 |
(gdb) r |
c |
Continue的简写,继续执行被调试程序,直至下一个断点或程序结束。 |
(gdb) c |
b <行号> d [编号] |
b: Breakpoint的简写,设置断点。两可以使用“行号”“函数名称”“执行地址”等方式指定断点位置。 d: Delete breakpoint的简写,删除指定编号的某个断点,或删除所有断点。断点编号从1开始递增。 |
(gdb) b 8 (gdb) d |
s, n |
s: 执行一行源程序代码,如果此行代码中有函数调用,则进入该函数; s 相当于其它调试器中的“Step Into (单步跟踪进入)”; 这两个命令必须在有源代码调试信息的情况下才可以使用(GCC编译时使用“-g”参数)。 |
(gdb) s |
si, ni |
si命令类似于s命令,ni命令类似于n命令。所不同的是,这两个命令(si/ni)所针对的是汇编指令,而s/n针对的是源代码。 |
(gdb) si |
p <变量名称> |
Print的简写,显示指定变量(临时变量或全局变量)的值。 |
(gdb) p i |
display ... undisplay <编号> |
display,设置程序中断后欲显示的数据及其格式。 undispaly,取消先前的display设置,编号从1开始递增。 |
(gdb) display /i $pc (gdb) undisplay 1 |
i |
Info的简写,用于显示各类信息,详情请查阅“help i”。 |
(gdb) i r |
q |
Quit的简写,退出GDB调试环境。 |
(gdb) q |
help [命令名称] |
GDB帮助命令,提供对GDB名种命令的解释说明。 |
(gdb) help display |
二.实例
命令详细解释如下:
1. 创建一个简单cpp程序
源文件内容如下:
#include<iostream>
using namespace std;
void swap(int &a,int &b)
{
int tmp;
tmp=a;
a=b;
b=tmp;
}
int main()
{
int i,j;
cout<<endl<<"Inputtwo int number:"<<endl;
cin>>i>>j;
cout<<"Beforeswap(),i="<<i<<" j="<<j<<endl;
swap(i,j);
cout<<"Afterswap(),i="<<i<<"j="<<j<<endl<<endl;
return 0;
}
2. 编译生成可执行文件
g++ -g -o gdb-sample gdb-sample.cpp,注意必须使用-g参数,编译会加入调试信息,否则无法调试执行文件。
3. 启动调试 gdb gdb-sample
4. 查看源文件 list 1,回车重复上一次指令
5. 设置调试断点 break 17,在第17行设置断点,info break查看断点信息(亦可使用缩写i b )
6. 调试运行 输入run 或者 r
7. 单步调试,step 或者 s 进入函数内部
8. 查看变量 print b 或者 p b
9. 查看函数堆栈bt,退出函数finish
10. 继续运行直到下一个断点或主函数结束continue或者c
11. 退出调试 输入q
参考:http://blog.csdn.net/wfdtxz/article/details/7368357