Chinaunix首页 | 论坛 | 博客
  • 博客访问: 28170
  • 博文数量: 7
  • 博客积分: 148
  • 博客等级: 入伍新兵
  • 技术积分: 75
  • 用 户 组: 普通用户
  • 注册时间: 2011-12-07 13:44
文章分类

全部博文(7)

文章存档

2012年(3)

2011年(4)

我的朋友

分类: 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提供printdisplay两条显示命令printdisplay 

下面调试一个有问题的程序

序如下

#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:

运行成功!上图!

阅读(2040) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~