本文章所运行的环境为 Ubuntu 18.04 系统。
下面我们就来创建一个 C 文件并用 gdb 调试。 代码:实现对一个整型数的反转功能,比如输入123,则输出321,当输入100时输出结果却正确。使用 gbd 调试器查找出原因。
使用 nano 创建 fan.c 文件
注:若没有nano编辑器,可使用命令:sudo apt install nano 安装。
nano fan.cfan.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); }使用 gcc 时加上 -g ,表示可用 gdb 调试器。
gcc -o fan -g fan.c打开 gdb 调试 fan 文件。
gdb fan列出代码及行号:(小写字母 l)
l设置断点:(让程序在断点的位置停下来,方便我们进行分析)
b 14 (根据行号设置断点) b ShowRevertNum (根据函数名设置断点) info b (查看所有断点信息)接下来执行程序,我们输入100后,可以看见程序停在了第14行,再来查看一下iNum变量的类型。
run whatis iNum输入 c 继续执行代码,再打印 iNum 的值。
c p iNum单步调试:(一步一步调试,可以配合 p 查看变量值)
n使用 quit 退出 gdb 调试。
quit简介: Linux中,程序崩溃时,一般会产生core文件,记录进程退出前的状态,调试段错误问题,借助于该文件,可快速定位问题。
可按如下步骤生成和使用core文件 Step 1: 让系统产生core文件 ulimit –c num #设定core文件容量(num为数字,为0是不产生core文件) Step 2: 运行程序,让程序崩溃,从而生成core文件Step 3: gdb配合core文件,定位问题 gdb 程序名 core文件名比如: gdb segDemo core实例: 创建 zhi.c 文件。
nano zhi.czhi.c:
#include <stdio.h> int main(void) { int *p=0; *p=1; return 0; }用 gcc 编译 zhi.c,运行程序使程序崩溃,从而生成 core 文件。
gcc -o zhi -g zhi.c ulimit -c 1000 ./zhi上面图片中 Segmentation fault 意思为段错误,括号里就表示生成了core文件。
段错误就是指访问的内存超出了系统所给这个程序的内存空间
下面使用 gdb 配合 core 文件定位问题。
gdb zhi core可以发现,是这个一句代码出现了问题。
在调试程序的时候,我们难免会遇到代码出错,可是写了一大堆代码逐条语句的看,是不现实的,也很难发现问题所在,当我们使用 gdb 调试工具时,那工作量可谓是大大降低,所以掌握 gdb 调试应该是每个程序员必备的技能,希望这个博客能对你有帮助,谢谢。
这个参考资料是我的老师给予我的,我也只是学着做,有兴趣可以看一下: 链接:https://pan.baidu.com/s/1Ndo8oYNcF5XsUYwVjuzuiQ 提取码:92tq
