作为C/C++程序员你可以不使用但你必须会的Linux调试器-gdb(GNU Debugger)

GDB是GNUDebugger,对于Linux学习者来说,它是一个强大的调试工具,能帮助理解系统运作、提升编程技能和故障排查。通过使用gdb,学习者可以调试内核、系统调用等,并通过设置断点、查看代码和变量来定位问题。要调试,需确保程序为debug版本,用gcc添加-g标志。调试命令包括显示代码、设置/删除断点、运行和查看堆栈等。
摘要由CSDN通过智能技术生成

gdb(GNU Debugger) 是一个用于调试 Linux 系统的软件工具。在学习 Linux 的过程中,gdb 的重要性不言而喻。以下是 gdb 在 Linux 学习者中的重要性的详细说明:

  1. 帮助理解 Linux 系统的运作方式:gdb 是一个强大的调试工具,可以帮助学习者深入了解 Linux 系统的运作方式。通过使用 gdb,学习者可以调试 Linux 内核、系统调用、文件系统等等。
  2. 提高编程技能:gdb 不仅仅是一个调试工具,还是一个开发工具。学习者可以使用 gdb 调试自己的程序,从而提高编程技能。调试程序需要对计算机系统的工作原理有深入的理解,而 gdb 可以帮助学习者做到这一点。
  3. 帮助解决故障:在使用 Linux 系统时,难免会遇到故障。gdb 可以帮助学习者快速定位和解决故障。学习者可以使用 gdb 调试系统命令、文件系统、网络连接等等,从而解决故障。
  4. 提高实践能力: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

blog.csdnimg.cn/7181c090e48e4cc899f3a7c14a675901.png)

在这里插入图片描述
  我们能很清楚的发现,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:查看当前栈帧局部变量的值


如有错误或者不清楚的地方欢迎私信或者评论指出🚀🚀

  • 20
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 14
    评论
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

侠客cheems

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值