如何使用GDB调试工具

描述

2.1 启动调试

在程序开始调试之前,要确保程序在gcc、g++编译时,有如下-g的添加调试信息的选项

gcc -g test.c -o test

1、启动未运行的程序

启动未运行的程序,只需要在对应程序目录中使用下面的命令

gdb test

2、调试已经开始运行的程序进程

调试已经开始运行的程序进程,首先先用top命令查看运行的程序进程的pid如下:

调试工具

比如我要加载的程序qemu-system-x86的pid为269427,则用下面的命令将进程附加到GDB调试

gdb attach 269427#gdb attach [进程号]

或者先打开gdb,在gdb中输入attach 269427也可以。效果如下

调试工具

此时程序是处于暂停状态的,用下面的命令让程序继续运行

#前面是缩写,#后是全写,两者皆可
(gdb) c#continue

效果如下:

调试工具

2.2 断点管理

添加断点

•方法一

#源程序只有一个文件
b [行号]#break [行号]

•方法二

#源程序多个个文件
b [文件名.c]:[行号]#break [文件名.c]:[行号]

添加断点后如下所示:

调试工具

查看所有断点

info b#info break

效果如下:

调试工具

我们可以看到所有的断点还有断点的编号

删除断点

delete#删除所有断点
delete [断点编号]#删除指定断点

2.3 中断调试执行

s#step 单步执行,进入函数调用
n#next 逐行执行当前线程的代码,不进入函数调用
c#continue 执行代码到下一个断点
f#finish 执行完当前函数并跳出
ignore [断点号] [次数]#设置或修改运行时断点的忽略计数

2.4 运行参数监控

p [变量名]#print [变量名] 输出该变量的值
display [变量名]#调试运行的每一步自动输出该变量的值
bt#显示当前的函数调用堆栈情况
list [行数]#显示当前执行的代码,默认10行
watch [变量名]#设置变量监视点,在变量值改变时暂停程序。


info breakpoints#显示当前已设置的断点列表。
info watchpoints#显示当前已设置的监视点(观察点)列表。
info functions#显示程序中定义的所有函数列表。
info variables#显示程序中定义的所有全局变量和静态变量列表。
info locals#显示当前函数的局部变量信息。
info args#显示当前函数的参数信息。
info threads#显示当前正在运行的所有线程信息。
info registers#显示当前线程的寄存器值。
info frame#显示当前的调用帧信息。
info sharedlibrary#显示加载的共享库信息。
info inferior#显示当前程序的执行状态信息。
info record#显示反复执行的命令数量。
info breakpoints location < address >#显示指定地址上设置的断点信息。
info break

2.5 多线程调试

info thread#命令查看当前线程的信息
info threads#命令查看当前所有线程
frame [栈帧号] #命令切换到指定的栈帧
thread [线程号]#切换到指定线程
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分