linux下的程序调试工具gdb

来源:互联网 发布:telnet不通公网80端口 编辑:程序博客网 时间:2024/05/16 07:43

1.基本调试

这里只列举最最常用的GDB命令。

(1) 启动GDB

gdb program:准备调试程序。也可以直接进入gdb,再通过file命令加载。

(2) 添加断点

b function:为函数设置断点。b是break的缩写,除了函数名,还可以是地址、当前执行处的+/-偏移等。

(3) 运行程序

run args:开始运行程序,run后面可以加程序需要的参数,就像在命令行正常运行时那样。

(4) 单步调试

s/n/si/c/kill:s即step in,进入下一行代码执行;n即step next,执行下一行代码但不进入;si即step instruction,执行下一条汇编/CPU指令;c即continue,继续执行直到下一个断点处;kill终止调试;quit退出GDB。

(5) 打印调试信息

bt:bt是backtrace的缩写,打印当前所在函数的堆栈路径。
info frame id:打印选中的栈帧的信息。
info args:打印选中栈帧的参数。
print variable:打印指定变量的值。
list:列出相应的源代码。
info registers:查看所有寄存器的值。

还有个更灵活强大的是直接打印%esp开始的前N个元素,例如打印栈上前10个元素就是:x/10x $sp


2.应用实例

例:

利用冒泡排序算法程序bubble.c,演示gdb调试过程,待调试程序bubble.c的源代码如下:


1.编译运行源程序.

为了方便调试,在编译的时候要加上-g选项,生成的可执行文件才能用gdb进行源码的调试.


2.启动gdb,查看bubble程序相关信息

(1)用list(l)指令列出源程序.

一次只能列出10行,如果要从第11行开始继续列出源代码可以直接按回车.

(2)用info source 命令查看以下当前源程序的信息.

可以得知程序名,目录,文件大小,语言等信息.


3.调试bubble程序.

(1)在函数swap处设置一个断点.

br是break的简写.断电设置成功则显示该断点的信息,该断点号为1,地址为0x400589,它在文件bubble.c的7行.

可以用info br命令查看以下文件bubble.c断点的信息和状态.

其中Num列表示断点的断点号;Type列表示断点的烈性,其中breakpoint表示断点,该指令同时也会显示watch的信息,watch表示检查点;Disp表示断点的状态,del表示断点暂停后自动删除断点,keep表示断点暂停后继续保持断点,dis表示断点暂停后关闭断点;Enb表示断点是否启动,该断点是y,表示处于enable状态;Address表示断点的内存地址;What表示断点在源程序中的位置.

(2)执行bubble程序.

程序已经在断点1停下来,当断点停下时,可以查看变量值.

(3)用p命令查看断点附近各变量值,并用n进行下一步的单步执行程序.

(4)删除断点1,并用info br查看到,当前断点为无.

(5)在18行号上设一个断点.发现断点号为2,地址为 0x4005e2,它在文件bubble.c的18行.并删除断点2,在18行设置一个断点,当j=5时让程序停下来.


用info br命令查看断点信息.


(6)

继续执行程序

程序在断点3停下,断点3是哥条件断点.要验证,只需要j=5即可.


0 0
原创粉丝点击