Linux调试器-gdb的使用

🧸🧸🧸各位大佬大家好,我是猪皮兄弟🧸🧸🧸
在这里插入图片描述

一.程序以debug方式发布(默认release)

首先,gcc/g++默认形成的可执行程序是 release的,所以无法直接被调试

gcc -o test-release test.c       //release版本
gcc -o test-debug test.c -g       //debug 版本

在这里插入图片描述
可以看出,debug版本是比release版本大的,release少了调试信息

二、Linux调试器-gdb

1.形成debug文件

gcc -o gdb_test gdb_test.c -g //-g表示以debug形式发布

是debug版本的才能去gdb调试,release是没有调试信息的

2.查看调试信息

readelf -S gdb_test | grep -i debug
//readelf用来显示一个或者多个elf格式的目标文件的信息
//grep -i是过滤的时候忽略大小写

在这里插入图片描述

3.进入调试

gdb gdb_test

在这里插入图片描述这叫表明正在调试状态,可以通过q/quit进行退出gdb调试

3.gdb指令的使用

1.list/l 显示

list/l 
list/l 某个数字

在这里插入图片描述
展示十行,同时,gdb可以记录最近一条命令,如果命令没有变化,可以直接回车,也就是说,输入了l/l 0 之后一直回车就可以显示全部代码了

2.开始调试

r  //开始调试,如果没有设置断点,就直接运行直至结束
r只能开始调试并执行到断点处(右端点的话),并不能跳到下一断点,再r一下就结束了

3.设置断点

b 行号 //breakpoint

4.查看断点

info b

在这里插入图片描述

5.删除断点

d 断点编号   //info b查看断点的时候,我们可以看到前面有断点编号,如上图

6.逐过程调试

n   //next  不进入自定义函数

7.逐语句调试

s   //进入自定义函数

8.打印变量内容

p 变量名/print 变量名   //打印变量内容

9.调用堆栈

bt  //查看调用堆栈情况

在这里插入图片描述

10.跑完当前所在函数

finish   //可以打断点跳过也可以finish去跳过

11.长显示(监视窗口)

display XXX //添加 监视对象
display    //监视对象添加了之后,想查看的时候就display就行了

在这里插入图片描述

12.取消长显示

undisplay 长显示编号  //取消XXX的长显示
undisplay //取消全部长显示

13.跳到指定行

这个命令通常用于在同一个函数中进行循环的跳过,而不建议跨函数

until 行数 //跳到指定行

14.跳到下一个断点

刚刚我们说r进行调试只能调到第一个断点处,再r就执行完了,所以,有了c(continue),进行跳到下一个断点的操作

continue //跳到下一个断点

15.关闭与开启断点

在这里插入图片描述
其中,Enb叫做enable,可使用的断点

enable 断点编号(第一列) //开启该断点
disable 断点编号       //关闭断点但不删除

16.调试过程中修改循环的次数

set var 变量名 = X   //设置此时变量的值,就可以将循环修改成已经进行了多少次

三、总结

这些指令也不用硬背,在写代码之后,多调试就会了,没必要硬记,一会儿就忘了,下一期更新进程相关的知识,感谢大家的支持!!!

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

猪皮兄弟

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

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

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

打赏作者

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

抵扣说明:

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

余额充值