实验三、用GDB调试程序的bug

  • 格式:docx
  • 大小:196.36 KB
  • 文档页数:4

下载文档原格式

  / 4
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验名称实验三用GDB调试程序的bug

(3)运行生成的可执行文件,观察运行结果。

(4)使用Cdb调试程序,通过设置断点、

单步跟踪,一步步找出错误所在。

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

实验步骤:

(1)在工作目录上新建文件greet.c,并用vim进入文件进行编辑

(2)在Vi中输入以上代码。

(3)在Vi中保存并退出: wq。

(4)用Gcc编译: gcc -g greet.c -o greet

(5)运行greet: . /greet

产生此错误的原因是少了两个头文件

#include

#include

输入头文件再运行这个错误就没有了

输出为:

The original string is Embedded Limux

The string afterward is

可见,该程序没有能够倒序输出。

(6)启动Gdb调试: gdb greet

(7)查看源代码,使用命令”l”。

(8)在30行(for循环处)设置断点,使用命令”b 30"。

(9)在33行(printf函数处)设置断点,使用命”b 33。

(10)查看断点设置情况,使用命令info b”

(11)运行代码,使用命令“r”。

(12) 单步运行代码,使用命令“n”。

(13)查看暂停点变量值,使用命令”p string2[size-i]"。

(12)继续单步运行代码数次,并使用命令查看,发现string2[size-i]的值是正确的

(15)继续程序的运行,使用命令”c”。

(16)此时依次查看sting2[0]、string2[1]. . ,发现string[0]没有被正确赋值,而后面都是正确的,这时,定位程序第31行,发现程序运行错误的原因在于“size-1”,由于i只能增加到size-1,这样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 aferward is xuniL deddedbmE

这时,输入结果正确。

本实验部分代码