分类: LINUX
2011-12-11 19:02:30
GDB功能
l 设置断点
l 监视程序变量的值
l 程序的单步执行
l 查看/修改变量的值
l 查看寄存器的堆栈情况
l 远程调试
l 调试线程
gdb常用命令
list:列表显示源代码。
run:执行当前被调试的程序
kill:终止正在调试的程序。
quit:终止gdb
file:装入想要调试的可执行文件。
break:在代码里设置断点,程序执行到这里时挂起
next:执行一行源代码但不进入函数内部。
step:执行一行源代码而且进入函数内部。
watch:监视一个变量的值
启动gdb
编译调试程序
$gcc –g test.c –o test
List命令
(gdb) list line1,line2
设置断点,info breakpoints打印 断点信息
管理断点(Delete删除断点)
Run执行,到达设置的断点后会停下来,continue让程序继续执行,打印出结果。
单步执行:
next:执行一行源代码但不进入函数内部。
step:执行一行源代码而且进入函数内部。
gdb提供print和display两条显示命令print和display
下面调试一个有问题的程序
程序如下
#include <stdio.h>
int display1(char *string);
int display2(char *string);
int main ()
{
char string[] = "Embedded Linux";
display1 (string);
display2 (string);
}
int display1 (char *string)
{
printf ("The original string is %s \n", string);
}
int display2 (char *string1)
{
char *string2;
int size,i;
size = strlen (string1);
string2 = (char *) malloc (size + 1);
for (i = 0; i < size; i++)
string2[size - i] = string1[i];
string2[size+1] = ' ';
printf("The string afterward is %s\n",string2);
}
分析程序得此程序的作用是让string2反序打印Embedded Linux。如图,打印的结果不正确
下面用GDB进行程序的调试:
先观察程序以及结果,问题出在string2的打印,所以在24行设置断点,run。打印信息:
发现这里出现了语法错误
继续打印。问题出现了!!(在数组的第二个位置时才打印第一个信息X,返回程序代码,找出错误!)
修改程序中的display2:
运行成功!上图!