嵌入式GDB调试工具的原理及教程

来源:本站
导读:目前正在解读《嵌入式GDB调试工具的原理及教程》的相关信息,《嵌入式GDB调试工具的原理及教程》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《嵌入式GDB调试工具的原理及教程》的详细说明。
简介:在嵌入式系统中经常会用到GDB调试工具,今天我就通过一个实例说明这个工具的原理及应用。

【实验平台】

带有Linux操作系统的PC机。

1、使用vi编辑器,将以下代码输入到名为greet.c的文件中。此代码的原意为输出倒序输出main函数中定义的字符串,但结果显示没有输出。

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

int display1(char *string);

int display2(char *string);

int main (int argc,char **argv)

{

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 %sn",string2);

free(string2);

}

2、使用gcc编译这段代码,gcc –g greet.c –o greet,注意要加上‘-g’选项以方便之后的调试。

3、运行生成的可执行文件./greet,观察运行结果。

4、使用gdb调试程序,通过设置断点、单步跟踪,一步步找出错误所在。

5、纠正错误,更改源程序并得到正确的结果。

The original string is Embedded Linux

The string afterward is

6、启动gdb调试:gdb greet

7、查看源代码,使用命令‘l’。

8、在30行(for循环处)设置断点,使用命令‘b30’

9、在33行(printf函数处)设置断点,使用命令‘b33’

10、查看断点设置情况,使用命令‘info b’

11、运行代码,使用命令‘r’

12、单步运行代码,使用命令‘n’

13、查看暂停点变量值,使用命令‘p string2[size - i]’

14、继续单步运行代码数次,并使用命令查看,发现string2[size-1]的值正确。

15、继续程序的运行,使用命令‘c’

16、程序在printf前停止运行,此时依次查看string2[0]、string2[1]…,发现string[0]没有被正确赋值,而后面的复制都是正确的,这时,定位程序第31行,发现程序运行结果错误的原因在于‘size-i’。由于i只能增到‘size-i’,这样string2[0]就永远不能被赋值而保持NULL,故输不出任何结果。

17、退出gdb,使用命令q

18、重新编辑greet.c,把其中的“string2[size - i] = string1[i]”改为“string2[size – i - 1] = string1[i];”即可

19、使用gcc重新编译:gcc –g greet.c –o greet

20、查看运行结果:./greet,得到结果正确

The original string is Embedded Linux

The string afterward is xuniL deddedbmE

这个工具熟练使用以后对大家以后调试程序有非常好的启发作用,今天就写这么多。

提醒:《嵌入式GDB调试工具的原理及教程》最后刷新时间 2024-03-14 01:04:38,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《嵌入式GDB调试工具的原理及教程》该内容的真实性请自行鉴别。