坚持看完,结尾有思维导图总结
这里写目录标题
- debug 和 release 版本
- 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
总结

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


















