坚持看完,结尾有思维导图总结
这里写目录标题
- 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
总结
希望大家看完,能够有所收获
如果有错误,请指出我一定虚心改正
动动小手点赞
鼓励我输出更加优质的内容