文章目录
1.简介
GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具,可完成以下功能
- 运行被调试程序,设置所有能影响该程序的参数和变量
- 保证被调试程序在指定的条件下停止运行
- 当被调试程序停止时,让开发工程师检查发生了什么
- 根据每次调试器的提示信息来做相应的改变,以便修正某个错误引起的问题
2.gdb使用
1)开始调试
首先使用gcc对源文件进行编译,一定要加上-g显示调试信息,如下
gcc -g test.c # 第一步
gdb a.out # 第二步
或者使用-o
对特定的名字的可执行程序进行调试
gcc -g test.c -o test # 第一步
gdb test # 第二步
2)gdb调试参数
进入gdb模式下,使用以下命令
命令 | 功能 |
---|---|
(gdb)l | 参看源文件(默认为前10行),加标号,回到第一次显示10行的位置,如l 1 。 同理可跳转值l 2 |
(gdb)b N | 在N行设置断点 |
(gdb)info b | 查看设置断点情况 |
(gdb)del n | 删除断点,如删除第一个断点为del 1 ,同样删除第二个断点为del 2 |
(gdb)r | 运行代码 |
(gdb)p n | 查看变量值 |
(gdb)n | 单步运行,遇到函数不进入 |
(gdb)s | 单步运行,遇到函数进入函数 |
(gdb)c | 恢复程序运行吗,直接运行到程序的下一个断点 |
(gdb)help command | 帮助 |
(gdb)q | 退出gdb调试 |
3)调试流程
在Linux中使用gdb调试下面的计算两个数之间的乘积和的一个程序
int main()
{
int count =1;
int sum = 1;
int n;
int limit_number;
printf("this program is to multiply between numbers!\n");
printf("Enter the limited numbers: ");
scanf("%d",&n);
if(n > 0)
{
while(count++ < n)
{
sum *= count;
}
printf("sum = %d\n",sum);
}
else if( n < 0 )
{
printf("wrong way input ,you should input > 0 numbers! try again!\n");
printf("Enter the limited numbers: ");
scanf("%d",&limit_number); //需要指定一个和以前不一样的限定值,以防止按参数传递
while(count++ < limit_number)
{
sum *= count;
}
printf("sum = %d\n",sum);
}
else
printf("the sum all equal to 0!,Bye\n");
return 0;
}
a.进入gdb调试
b.使用l命令查看
c.设置断点并查看断点
这里在12行和19行设置了两个断点
d.运行
单步运行至13行断点处
e.查看变量值
查看设置的sum
变量和count
变量
f.继续运行到下一个断点
跳过此断点,使用c命令继续运行到下一个断点
3.gdb使用要点
- gcc编译选项中一定要加入
-g
- 只有在代码处于“运行”或者“暂停”状态时才能查看变量值
- 设置断点后程序在指定行之前停止
4. 参考
gdb的其他详细用法可参考一下两篇博文
参考博文1