Linux : gdb调试

release 和debug版本

Debug 版本为可调式版本,生成的可执行文件中包含调试需要的信息。我们作为开发人员,最常用的就是 debug 版本的可执行文件。

Release 版本为发行版本,是提供给用户使用的版本。用 gcc 默认生成的就是 Release 版本。

Debug版本的生成

因为调试信息是在编译过程时加入到中间文件(.o)中的,所以必须在编译时控制其生成包含调试信息的中间文件。

即增加调试信息 -g
示例

gcc -o main main.c -g

或者

gcc -c main.c -g
gcc -o main main.o

gdb常用命令

  • l —— 显示main函数所在文件的源代码
  • b+行号—— 给指定行添加断点
  • b+函数名 —— 给指定函数的第一有效行加断点
  • info break —— 显示断点信息
  • r(run) —— 启动该程序
  • n(next) —— 单步执行
  • c(continue) —— 继续执行,直接到下一个断点处
  • finish —— 跳出函数
  • p + val —— 打印val的值
  • p + &val —— 打印val地址
  • p + 数组名 —— 打印数组所有元素的值
  • q —— 退出调试

程序示例

测试程序为:

在这里插入图片描述

release版本

正常编译链接步骤为:

gcc -o test test.c

这时候发现程序并没有按照我的要求跳出循环(我是要求如果输入end就退出)
在这里插入图片描述

debug版本

所以为了找出问题所在,我决定将其 编译为debug版本

步骤:

  1. gcc -o test test.c -g
  2. gdb test
    一定不要忘了加上 -g
    在这里插入图片描述

调试过程

接下来先试试常用命令

l——显示源代码
在这里插入图片描述

q——退出
在这里插入图片描述

命令都能正常用,那就加断点调试。这里给字符数组这一行和输出的那一行加断点。
在这里插入图片描述

这里单步执行,并用p查看,发现buff里的数据是 end\n ,和 end 不相等,所以不能退出。
在这里插入图片描述

修改方法:
错误是末尾有换行符,那再输入后把换行符去掉就好,如图:
fgets的下一句就是把末尾的换行符换成’\0’ , 即字符串的结束标志。

在这里插入图片描述

这时候如果输入end, 就可以正常退出了
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

_索伦

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

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

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

打赏作者

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

抵扣说明:

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

余额充值