本文共 2275 字,大约阅读时间需要 7 分钟。
如有错误,欢迎指正,谢谢!
GDB : GNU Debugger,是GNU工程为GNU操作系统开发的
调试器,但它的使用不局限于GNU操作系统, GDB可以运行 在UNIX、Linux甚至Microsoft Windows。能设置断点使程序停住,从而观察变量的变化以及函数的执行情况,还可以跳过某些函数来查错
gcc –g –o main main.c
用gdb调试时,必须要有调试信息,通过上述命令就可以给该程序添加调试信息gdb 程序名
注意此处的程序必须是参数 | 作用 |
---|---|
file | 装入想要调试的可执行文件 |
kill | 终止正在调试的程序 |
list | 列出产生执行文件的源代码的一部分 |
next | 执行一行源代码但不进入函数内部 |
step | 执行一行源代码而且进入函数内部 |
run | 执行当前被调试的程序 |
c | 继续运行程序 |
quit | 终止gdb |
watch | 使你能监视一个变量的值而不管它何时被改变 |
backtrace | 栈跟踪,查出代码被谁调用 |
查看变量的值 | |
make | 使你能不退出gdb就可以重新产生可执行文件 |
shell | 使你能不离开gdb就执行UNIX shell命令 |
whatis | 显示变量或函数类型 |
break | 在代码里设断点,这将使程序执行到这里时被挂起 |
info break | 显示当前断点清单,包括到达断点处的次数等 |
info files | 显示被调试文件的详细信息 |
info func | 显示所有的函数名称 |
info local | 显示当函数中的局部变量信息 |
info prog | 显示被调试程序的执行状态 |
delete [n] | 删除第n个断点 |
disable[n] | 关闭第n个断点 |
enable[n] | 开启第n个断点 |
ptype | 显示结构定义 |
set variable | 设置变量的值 |
call name(args) | 调用并执行名为name,参数为args的函数 |
Finish | 终止当前函数并输出返回值 |
return value | 停止当前函数并返回value给调用者 |
我们先使用该程序作为例子
#includevoid 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时会出错,让我们来寻找错误吧。同样的我们从一个例子入手
#include#include #define BUFSIZE 256static char acBuf [BUFSIZE] ;static char *pStr;int main(void){ printf("Please input a string:"); gets(pStr); printf("\nYour string is:%s\n", pStr);}
我们先正常的用gcc编译,再执行试试
还是想用gcc生成带调试信息的可执行文件,再进入gdb
我们先看看pStr的值
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201023210000373.png#pic_center查看代码并下断点
继续运行该程序,并重新设置pStr的值set variable pStr=&acBuf
单步执行,就可以输出了
转载地址:http://yahq.baihongyu.com/