如有错误,欢迎指正,谢谢!
GDB : GNU Debugger,是GNU工程为GNU操作系统开发的 调试器,但它的使用不局限于GNU操作系统, GDB可以运行 在UNIX、Linux甚至Microsoft Windows。
能设置断点使程序停住,从而观察变量的变化以及函数的执行情况,还可以跳过某些函数来查错
gcc –g –o main main.c 用gdb调试时,必须要有调试信息,通过上述命令就可以给该程序添加调试信息
gdb 程序名 注意此处的程序必须是
我们先使用该程序作为例子
#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); }代码功能说明:该代码的作用是将一个数倒过来,如:431经过该系统后就变为134。 但程序在输入100时会出错,让我们来寻找错误吧。
首先我们先用gcc生成带调试信息的程序,再启用gdb 通过gdb l列出源代码(此处的l等效为list) 此处的作用是方便我们再之后的过程中通过行号下断点 下断点 下断点有多种方式,可以通过行号下断点(个人感觉该方式比较方便),还可以通过函数名下断点 当我们下好断点后就可以让程序开始运行了 当我们输入数据后,程序继续运行并在第一个断点处停下来了此时我们通过whatis和print来查询iNum的类型、打印其值 让程序继续运行,到达第二个断点,再通过next逐步调试,找出错误 调试完后,通过quit退出同样的我们从一个例子入手
#include <stdio.h> #include <string.h> #define BUFSIZE 256 static char acBuf [BUFSIZE] ; static char *pStr; int main(void) { printf("Please input a string:"); gets(pStr); printf("\nYour string is:%s\n", pStr); }我们先正常的用gcc编译,再执行试试 这时我们就发现出现了段错误(Segmentation fault) 那么,我们就要用GDB设断点来调试了
还是想用gcc生成带调试信息的可执行文件,再进入gdb
我们先看看pStr的值 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20201023210000373.png#pic_center
查看代码并下断点
继续运行该程序,并重新设置pStr的值set variable pStr=&acBuf
单步执行,就可以输出了