调试工具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的使用/