首页 理论教育 Linux系统编程:使用gdb调试器

Linux系统编程:使用gdb调试器

时间:2023-11-18 理论教育 版权反馈
【摘要】:图2.54启动gdb进行调试可以看到gdb启动界面中显示了gdb的版本、自由软件等信息,然后进入了有“gdb”开头的命令行界面。图2.56b命令在gdb中可以设置多个断点。q命令用于退出gdb调试器,如图2.65所示。

Linux系统编程:使用gdb调试器

●实验目的:

学会gdb调试器的使用。

●实验要求:

编写一应用程序,使用gdb调试,调试中使用本小节所介绍的所有命令。

●实验器材:

软件:安装了Linux的vmware虚拟机

硬件:PC机一台。

●实验步骤:

(1)先用vi编辑文件test.c,用于gdb调试器调试,内容如下:

(2)将test.c文件编译成包含标准调试信息的文件test。

[root@localhost gdb]# gcc-g test.c-o test

[root@localhost gdb]# ls

test test.c

(3)启动gdb进行调试,如图2.54所示。

图2.54 启动gdb进行调试

可以看到gdb启动界面中显示了gdb的版本、自由软件等信息,然后进入了有“gdb”开头的命令行界面。

(4)l(list)命令。

l命令用于查看文件,如图2.55所示。

图2.55 l(list)命令

可以看到每行代码面前都有对应的行号,这样方便设置断点

(5)b(breakpoint)命令。

b命令用于设置断点,断点调试是调试程序的一个非常重要的手段,设置方法为:在“b”命令之后加上对应的行号,如图2.56所示。

图2.56 b(breakpoint)命令

在gdb中可以设置多个断点。代码运行时会到断点对应的行之前暂停,在图2.56中,代码就会运行到第7行之前暂停(并没有运行第7行)。

(6)info命令。

info命令用于查看断点情况,设置好断点后可以用它来查看,如图2.57所示。

图2.57 info命令

(7)r(run)命令。(www.xing528.com)

r命令用于运行代码,默认是从首行开始运行,也可以在r后面加上行号,从程序中指定行开始运行,如图2.58所示。

图2.58 r命令运行代码加上行号

可以看到程序运行到断点处就停止了。

(8)p(print)命令。

p命令用于查看变量的值,在调试时我们经常要查看某个变量当前的值与我们逻辑设定的值是否相同,输入p+变量名即可,如图2.59所示。

图2.59 p(print)命令

可以看到result在第6行已被赋值为零,而i目前还没有被赋值,所以是一个随机数,在主函数里看不到num的值,只有进入子函数才能看到。

(9)s(step)命令。

s命令用于单步运行,另外n(next)命令也用于单步运行,它们的区别在于:如果有函数调用的时候,s会进入该函数而n不会进入该函数,如图2.60所示。

图2.60 s(step)命令

可以看到进入了sum子函数,这时候就能看到num的值为100。

(10)n(next)命令。

n命令用于单步运行,下面是n命令的使用,如图2.61所示。

图2.61 n(next)命令

与s命令的运行效果对比会发现,使用n命令后,程序显示函数sum的运行结果并向下执行,而使用s命令后则会进入到sum函数之中单步运行。

(11)finish命令。

finish命令用于运行程序,直到当前函数结束。例如,当进入了sum函数,使用finish命令的情况如图2.62所示。

图2.62 finish命令

当调试时如果觉得某个函数存在问题,进入函数调试之后发现问题不在这个函数,那么就可以使用finish命令运行程序,直到当前函数结束。

(12)c命令用于恢复程序的运行。例如,在一个程序中设置了两个断点,如图2.63所示,而觉得问题不会在这两个断点之间的代码上,那么就可以在查看完第一个断点的变量及堆栈情况后,使用c命令恢复程序的正常运行,代码就会停在第二个断点处,如图2.64所示。

图2.63 c命令

图2.64 c命令恢复程序

(13)q(quit)命令。

q命令用于退出gdb调试器,如图2.65所示。

图2.65 q(quit)命令

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈