一、GDB 是么子
GDB : GNU Debugger,是GNU工程为GNU操作系统开发的 调试器,但它的使用不局限于GNU操作系统, GDB可以运行在UNIX、Linux甚至Microsoft Windows。可以调试C、C++、Objective-C、Pascal、Ada等语言编写的程序。
GDB 的使用:
- 设置断点使程序停住
- 监视或修改程序中变量的值
- 跟踪代码执行过程
注意:通过 gcc 编译程序时,需加上 -g 选项 (为程序添加调试信息);如:
gcc -o test -g test.c
二、如何用 GDB 调试
样例代码 (gdb.c):
#include <stdio.h>
void ShowRevertNum(int iNum)
{
while (iNum > 10)
{
printf("%d", iNum % 10);
iNum = iNum / 10;
}
printf("%d\n", iNum);
}
int main(void)
{
int iNum;
printf("Please input a number :");
scanf("%d", &iNum);
printf("After revert : ");
ShowRevertNum(iNum);
}
程序说明:实现一个整型数的反转功能,如输入1234,返回4321。
但当输入 100 时,却返回 010,相信大家已经发现问题的所在了
那么现在我们用 gdb工具调试一下
gcc -o testgdb -g gdb.c
gdb testgdb

a.
熟悉 gdb 命令
命令 | 说明 |
---|---|
l | 显示代码行数 |
b(break) | 设置断点 |
run | 执行程序 |
whatis | 变量数据类型查看 |
c | 继续执行 |
s | 单步调试 |
n | 单步执行 |
quit | 终止gdb调试 |
查看变量的值 |

b.
通过 gdb 调试,跟踪输入样例为 100时,程序的运行轨迹

通过调试发现,当 iNum=10时,iNum>10为 false,所以程序直接跳出循环,输出 iNum,即 10;因此,最终输出结果为 010。
c.
修改代码
通过 gdb 调试发现了问题的所在,即当 iNum=10时,程序会跳出循环,为防止此时程序跳出,只需将 “while (iNum > 10)” 修改为 “while (iNum >= 10)”

重新编译运行程序: