gdb(GNU Debugger) 是一个用于调试 Linux 系统的软件工具。在学习 Linux 的过程中,gdb 的重要性不言而喻。以下是 gdb 在 Linux 学习者中的重要性的详细说明:
- 帮助理解 Linux 系统的运作方式:gdb 是一个强大的调试工具,可以帮助学习者深入了解 Linux 系统的运作方式。通过使用 gdb,学习者可以调试 Linux 内核、系统调用、文件系统等等。
- 提高编程技能:gdb 不仅仅是一个调试工具,还是一个开发工具。学习者可以使用 gdb 调试自己的程序,从而提高编程技能。调试程序需要对计算机系统的工作原理有深入的理解,而 gdb 可以帮助学习者做到这一点。
- 帮助解决故障:在使用 Linux 系统时,难免会遇到故障。gdb 可以帮助学习者快速定位和解决故障。学习者可以使用 gdb 调试系统命令、文件系统、网络连接等等,从而解决故障。
- 提高实践能力:gdb 是一个实践性很强的工具。学习者可以通过使用 gdb 进行调试,提高自己的实践能力。在实际应用中,掌握 gdb 是非常有用的。
安装gdb
sudo yum install -y gdb
进入gdb调试:
默认情况下,gdb无法进行对现在发布程序进行调试
在Linux中,用g++/gcc生成可执行程序时,默认是release版本的,而release版本是发布版本无法进行调试,我们需要先将其更改为debug版本。
gcc:默认行为:
- 默认是动态链接
- 默认是release
debug与release版本区别:debug是提供给程序员的,程序员需要经常去写代码还需要通过调试去验证代码的正确性。release版本是提供给用户的,用户不需要写代码也不需要调试,所以能够优化掉一部分功能,减少占用的内存。
调试准备
要用gbd调试,我们首先需要将可执行程序更改为debug版本,给编译器添加-g标识:
gcc -o mytest_g Test.c -g
我们能很清楚的发现,debug版本的可执行程序要比release版本的可执行程序占用空间更大
这样我们就可以调试起来了。
我们还可以通过下面方式判断是否是debug版本:
readelf -S mytest_g | grep debug
debug版本是带有调试信息的
正式调试
显示代码:
list/l 行号:显示源代码,回车直接接着上次的位置往下列,每次列10行
打断点:
break / b + 行号:在某一行设置断点
info break / b :查看所有断点
删除断点:
d + breakpoint的编号(不是打断点的行号)
删除所有断点:d breakpoint
开始调试:
run / r (开始调试,在断点处停下来,相当于vs的F5)
逐过程:
next / n(相当于vs的F10)
逐语句:
step / s (相当于vs的F11)
逐断点:
continue / c (运行至下一个断点)
查看调用堆栈:breaktrace / bt
直接运行完当前所处的函数,并在函数返回后停下来:finish
打印变量值:p + 变量名
常显示变量:display + 变量名(每次停下来都会打印它的值)
取消常显示变量:undisplay + 编号(每个常显示之前)
跳转到指定行:until + 行号(比如我们在一个循环中,我们需要跳出循环就可以使用until 这个跳转的行号未必一定是我们until后面跟的行号,编译器会自己优化一下)
其它调试指令:
list/l 函数名:列出某个函数的源代码。
break 函数名:在某个函数开头设置断点
print / p:在 GDB 调试程序的过程中,输出或者修改指定变量或者表达式的值
set var:修改变量的值
disable breakpoints:禁用断点
enable breakpoints:启用断点
info(i) locals:查看当前栈帧局部变量的值
如有错误或者不清楚的地方欢迎私信或者评论指出🚀🚀