Linux调试器---gdb的使用
顾得泉:个人主页
个人专栏:《Linux操作系统》 《C/C++》
键盘敲烂,年薪百万!
一、gdb的背景
gdb,全称为GNU调试器(GNU Debugger),是一个功能强大的源代码级调试工具,主要应用于Unix系统,以及Linux下的程序开发。它与GCC一样,都是源于GNU计划,同GCC、Emacs等工具同期诞生。在嵌入式开发中,gdb的使用非常广泛,对于程序的调试有着不可替代的作用,因此对每位嵌入式开发工程师而言都有着至关重要的意义。
gdb提供了多种强大的功能,以帮助程序员查看程序在执行过程中的内部状态,如:设置断点、单步执行、查看变量值等。这些功能都极大地方便了程序员对程序的调试工作。
二、gdb的安装
使用该指令安装gdb调试器:(Ubuntu环境)
sudo apt-get install gdb
如果有小伙伴使用上述命令无法安装,尝试这个命令:
yum install -y gdb
三、Debug和Release
默认我们已经创建好了text.c和makefile文件
我们进行make编译:
接着我们对text文件进行gdb调试:
无法调试!为什么呢?
1.程序的发布方式有两种,debug模式和release模式
2.Linux gcc/g++出来的二进制程序,默认是release模式,release模式下无法调试
3.要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项
我们接下来对makefile文件进行修改,加上 -g选项:
接下来我们尝试进行调试:
可以进行调试了 。
四、gdb的基础使用
1.进入和退出
进入:gdb 文件名
退出:CTRL+d或者quit
2.查看调试的代码
list or l + 行号,显示指定行之后的代码(自动记录最后一条指令)
3.断点
1.打印断点(三种方式)
1.b+行号
2.b+函数名+行号
由于我的疏忽忘记编辑函数,就不进行展示了,大家可以自行练习
3.b+文件名+行号(适用于多文件下)
2.查看断点
info b
3.删除断点
d,注意在删除断点中,显示的是编号,而不是行号。
4.使能(禁用/开启)断点
1.禁用:disable
这里的y,n代表断点是否启用,由上图可以看出3号断点已经被禁用。
2.开启:enable
4.代码执行结束
r,直接把要调试的代码全部执行
5.查看调用堆栈
因为我的text文件比较简单,没有进行调用堆栈,大家感兴趣的可以自行练习。
五、扩展完善
list/ l 行号:显示binFile源代码,接着上次的位置往下列,每次列10行
list /l函数名:列出某个函数的源代码
r或run:运行程序
n或 next:单条执行
s或step:进入函数调用
break(b)行号:在某一行设置断点
break 函数名:在某个函数开头设置断点
info break :查看断点信息
finish:执行到当前函数返回,然后挺下来等待命令
print(p):打印表达式的值,通过表达式可以修改变量的值或者调用函数
p变量:打印变量值
set var:修改变量的值
continue(或c):从当前位置开始连续而非单步执行程序
run(或r):从开始连续而非单步执行程序
delete breakpoints:删除所有断点
delete breakpoints n:删除序号为n的断点
disable breakpoints:禁用断点
enable breakpoints:启用断点
info(或i) breakpoints:参看当前设置了哪些断点
display变量名:跟踪查看一个变量,每次停下来都显示它的值
undisplay:取消对先前设置的那些变的跟踪
until X行号:跳至X行
breaktrace(或bt):查看各级函数调用及参数
info (i) locals:查看当前栈帧局部变量的值
quit:退出gdb
结语:Linux调试器关于gdb使用的分享到这里就结束了,没有进行展示的操作大家可以自行练习,希望本篇文章的分享会对大家的学习带来些许帮助,如果大家有什么问题,欢迎大家在评论区留言~~~