调试工具GDB的使用

大三了,是时候定一下自己的方向了,还剩一年就要开始秋招了。准备向Linux内核和Linux嵌入式方向走,感觉未来物联网设备会走进千家万户,Linux嵌入式系统用途将会增加很多。既然选择了某个方向,有了目标之后就义无反顾的走下去吧!

GDB使用实例

1.进入gdb

使用gcc编译源文件时,加上-g选项,之后使用 gdb + 编译之后的文件名即可进入(gdb)开头的命令行界面了。如下图:

2.查看文件

在gdb中键入 ‘l’(list)就可以查看载入文件,如下图所示:

注意:一般情况下源代码中的行号与用户书写的行号是一致的,但有时由于用户的某些编译选项会导致行号不一样的情况,因此,一定要查看在gdb中的行号。

3.设置断点

设置断点可以使程序到达一定的位置暂停它的运行,程序员在该位置可以方便地查看变量的值、堆栈等情况,从而找出代码的症结所在。

在gdb中设置断点非常简单,只需要在“b”后加入对应的行号即可。如下图:

4.查看断点处的情况

在设置完成断点之后,用户可以键入”info b“来查看断点设置情况,在gdb中可以设置多个断点。

5.运行代码

接下来就可以运行代码了,gdb默认从首行开始运行代码,可键入”r”(run)即可,在r后面加上行号即可从程序中指定行开始运行。

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

6.查看变量值

在程序停止运行之后,程序员需要查看断点处的相关变量值。在gdb中只需键入“p + 变量值”即可,如下图所示:

7.观察变量

在某一循环处,我们往往需要观察一个变量的变化情况,这时候就需要键入命令“watch”来观察变量的变化情况,如下图所示:

8.单步运行

单步运行是指一次只运行一条语句,这样可以方便的查看程序运行结果,在此处只需要键入“n”(next)即可。

9.程序的继续运行

命令“c”(continue)可以使gdb继续运行以下程序,再次遇到断点停止。

10.退出gdb

退出gdb只需使用指令“q”(quit)即可。

设置/删除断点

命令格式 作用
break+设置断点的行号 用于在程序中对应行设置断点
tbreak+行号或者函数名 设置临时断点,到达后被自动删除
break+filename+行号 用于在指定文件的对应行设置断点
break+<0x…> 用于在内存某一位置处暂停
break+行号+if条件 用于设置条件断点,在循环中使用非常方便
info breakpoints/watchpoints 查看断点/观察点的情况
clear+要清除的断点的行号 清除对应行的断点
disable+断点编号 让断点暂时失效,enable可以使之生效
awatch/watch+变量 设置一个观察点,当变量被读出或者写入时暂停
rwatch+变量 设置一个观察点,当变量被程序读时,程序被暂停

数据相关命令

命令格式 作用
display+表达式 该命令用于显示表达式的值,使用了该命令之后,每当程序运行到断点后都会显示表达式值
info display 用于显示当前所有要显示值的表达式的有关情况
delete +display编号 删除一个要显示值的表达式
disable/enable + display编号 使一个要显示的表达式暂时无效/有效
whatis+变量 显示某个表达式数据类型
print(p)+变量或表达式 打印某个变量或者表达式的值
set+变量=变量值 改变程序中一个变量的值

调试工具GDB的使用
https://chujian521.github.io/blog/2019/08/31/调试工具GDB的使用/
作者
Encounter
发布于
2019年8月31日
许可协议