GDB概述:
GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。
一般来说GDB主要有三大功能: 1)启动被调试函数
2)让被调试的程序在指定位置停住
3) 当程序停住时,检查它的状态值
GDB的使用:
举下面的程序为例:
写完程序之后,输入“ gcc -g gdb.c ” 和 “ gcc a.out ” 启动GDB对程序的调试。
GDB的指令:
运行指令:run(简写“r”);
设置中断指令:break 行数(简写“b”):;
查看代码指令:list
在GDB中使用查看源代码相关的命令时,有一个当前文件的概念,当命令的位置参数没有限定一个文件的时候(不论是明确限定还是隐含限定),将使用当前文件。当前文件默认是main函数所在文件,如果程序当前正处于断点位置,则断点所在文件即为当前文件。
如下图:
会发现函数不是从头开始显示,这是因为当前行不是从头开始的程序只能;且每次显示10行左右,这是可以改变参数值的。
引申的指令:
list - :显示当前行前面程序。出现
list +: 往后显示源代码。
set listsize <count> 设置一次显示源代码的行数
list , <last> 显示从当前行到last行之间的源代码
查看状态值指令:print 变量名(简写 p)
查看断点信息指令:info break
单步执行指令:next(不会进入子函数)
step(可进入子函数)
继续执行指令:continue(简写“c”,在断点处继续执行,知道遇到下一个断点或者程序结束)
finish(继续执行,结束此函数)
退出指令:quit
运用GDB调试段错误
如下段程序:
#include<stdio.h>
int main()
{
*pr = "HELLO WORLD";
pr ++;
*pr = 'L';
printf("pr = %d\n",pr);
return 0;
}
运行程序之后发现出现段错误了,运行GDB指令在哪里停住,哪里就是出现段错误的地方,便于我们修改。