Linux关于 gdb 调试器的使用

坚持看完,结尾有思维导图总结

debug 和 release 版本

首先要说的是 ,在 Linux 中 gcc 直接编译是不能进行调试的
而是要在加上 -g 选项才能得到可调试的文件
以下程序用一个例子来讲解

在这里插入图片描述
c 语言文件就一个 printf
在这里插入图片描述

Makefile 文件中就是两个编译
一个编译是 debug 和 release 版本(单词写错了)

然后进行编译后得到两个文件
在这里插入图片描述

可以使用 readelf 的命令看看 二进制文件,二进制文件以 elf 的格式保存起来
我们可以看看里面的debug 信息
在这里插入图片描述
使用的是命令
readelf -S debug |grep -i debug
关于 debug 版本的调试信息

gdb 常见命令

gdb 是Linux中使用的调试的工具
就和vs 中进入调试状态是相似的

断点

调试最重要的一个操作是打断点和看断点

l 这个后面可以跟行数 n 或函数 x,能够列出的 n 行开始的源程序和 函数 x 的 源程序,用来看代码
在这里插入图片描述
break + 行号 /函数 在对应的行号或者函数打上断点
info break 可以看到 断点的信息
在这里插入图片描述
delete breakpoints 断点号码 可以删除标号 NUM 为 n 的断点
在这里插入图片描述
delete breakpoints 可以删除所有断点

利用 enable 和 disable 可以保留断点痕迹 但是禁用或者使用断点
在这里插入图片描述
原来断点 Enb 都是 y
disable breakpoints n 可以禁用断点 n
在这里插入图片描述
enable breakpoints n 可以使能断点 n
执行后发现 Enb 再次变成了 y
在这里插入图片描述
r 是运行到断点处的命令
当没有断点的时候就执行完
在这里插入图片描述
有断点的时候就会
在这里插入图片描述
阐述了到达对应的断点处并且显示原码
到这里,关于断点的知识就讲完了

逐行调试和观察变量

因为前面的程序没有什么变量和循环,所以这里写一个阶乘和相加的循环来进行另一个说明
现在的例子变成了这个程序,可以看到 阶乘中有循环,也有函数
在这里插入图片描述

如果我在第 20 行打断点,然后 r (运行),就会停止在 断点处
在这里插入图片描述
然后我们有两个参数 add 和 stepret
利用 display + 变量 就能够随时查看变量 需要 r 了之后才能 display
在这里插入图片描述
利用 n 能够逐过程进行(不进入函数),向下运行两次,得到两个变量的变化
在这里插入图片描述
利用 s 可以进入函数看函数的运行(逐语句运行)
重新运行后,走到断点的位置(阶乘位置),s 进入函数,不断回车可以看到 循环在不断进行
我把 ret 和 i 都display 出来,能够看到在不断循环

在这里插入图片描述

如果觉得循环太烦,用 until x 直接运行到 x 行
就能够直接运行到循环跳出
在这里插入图片描述
或者可以使用 finish 运行完这个函数
可以看到 运行完后由返回到进入的位置
并且记录和函数的 return 值是 $1 = 6
在这里插入图片描述
最后 q 退出 gdb

总结

在这里插入图片描述

希望大家看完,能够有所收获
如果有错误,请指出我一定虚心改正
动动小手点赞
鼓励我输出更加优质的内容

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值