嵌入式Linux调试器GDB的使用

调试一直是程序开发的重中之重,使用GDB调试可以帮助我们快速找到程序中的错误。

注意:在进行GDB调试之前,程序在gcc编译时要加上“-g”选项。

1.进入GDB:gdb 可执行文件名

2.查看GDB:“ l ”(list)

3.设置断点:设置断点可以使程序执行到某个位置时暂时停止,方便在该位置处查看变量的值、堆栈情况等,从而找到程序中的问题所在。需要注意的是在GDB中利用行号设置断点是指代码运行到对应行之前暂停(并没有运行到这一行),在GDB中可以设置多个断点。最常用设置断点的方法是在“b”(break)后加入对应的行号b 行号

4.查看断点设置情况:info b

5.运行代码:键盘输入“ r ”(run)                从指定行开始运行:r 行号                 

6.查看变量值:p 变量名        

GDB在显示变量值时都会在对应值之前加上“ $N ”标记,它是当前变量值的引用标记,之后再次引用此变量可以直接写作“ $N ”。

7.观察变量:“ watch ”

8.单步运行:“ n ”(next)          

9.程序继续运行:“ c ”(continue)        再次遇到断点或程序结束时停止

10.退出GDB:“ q ”(quit)

补充:GDB中常见的断点设置与删除命令

命令格式 作用
break + 设置断点的行号 用于在程序中对应行设置断点
tbreak + 行号或函数名 设置临时断点,到达后被自动删除
tbreak + filename + 行号 用于在指定文件的对应行设置断点
break + <0x...> 用于在内存某一位置处暂停
break + 行号 + if + 条件 用于设置条件断点,在循环中使用非常方便
info breakpoints/watchpoints 查看断点/观察点的情况
clear + 要清除断点的行号 用于清除对应行的断点
delete + 要清除断点的编号

用于清除断点和自动显示的表达式的命令

与clear的不同点:clear要给出断点的行号,delete要给出断点的编号。

用clear命令清除断点时GDB会给出提示,

而用delete清除断点时GDB不会给出任何提示

disable + 断点编号

让所设断点暂时失效。如果要让多个编号处的断点失效,

可将编号之间用空格隔开

enable + 断点编号 与disable相反
awatch + 变量 设置一个观察点,当变量被读出或写入时程序被暂停
rwatch + 变量 设置一个观察点,当变量被程序读时,程序被暂停
watch + 变量 同awatch

在多线程的程序中,观察点的作用很有限,GDB只能观察在一个线程中的表达式的值。如果用户确信表达式只被当前线程所存取,那么观察点才有效。GDB不能注意一个非当前线程表达式值的改变。

常用的gdb调试命令基本上就是这些了,感兴趣的小伙伴可以自己找一个有逻辑bug的代码试着用gdb调试一下,调试命令都挺简单的,多用几遍就记住了,如果觉得这篇文章对你有帮助,欢迎点个小红心支持一下,以后也会继续分享一些非常实用的基本知识,第一次发布文章难免存在不足,也欢迎大家在评论区多提意见,非常感谢!

你可能感兴趣的:(c#,vim,物联网,linux,面试)