目录
初步了解
gdb是Linux中的调试器。
发布软件一般有两种方式debug和release。
debug版本:一般开发人员使用,这个版本形成的可执行程序有调试功能和调试信息,文件比较大。
release版本:一般测试人员使用,这个版本形成的可执行程序没有调试功能和调试信息,文件较小。
gcc/g++编译时默认release版本且动态链接。
gcc -g 指定文件 #编译链接指定文件以debug版本发布
g++ -g 指定文件 #编译链接指定文件以debug版本发布
这样,形成的可执行程序就可以被我们调试了。
gdb安装
yum install -y gdb #root用户安装gdb
sudo yum install -y gdb #非root用户安装gdb
gdb使用
#基本操作
gdb 可执行程序:开始调试指定的可执行程序。
quit:退出调试。
#打印相关指令
l :显示代码(从哪一行开始取决于vim退出时光标停留在哪),之后回车键继续打印之后的代码。
l 指定行号 :显式指定行之后的部分代码,之后回车键继续打印之后的代码。
l 指定函数 :显示指定函数。
l 源文件:指定行号 :显示源文件中从指定行号开始的几行。
l 源文件:指定函数 :显示源文件中的指定函数。
#打断点
b 行号:给指定行打断点,gdb会给当前断点一个断点编号。
b 函数名:给指定函数名打断点(会打在函数首句处)。
b 源文件:行号:给源文件的指定行打断点。
b 源文件:函数名:给源文件的指定函数打断点。
#查看断点信息
info b:查看所有打的断点。
#删除断点
d 断点编号:删除指定断点编号的断点。
#开启/禁用断点
disable 断点编号:使指定断点编号的断点失能(还是一个端点,只不过跟没打一样)。
enable 断点编号:使失能断点重新恢复为断点。
#调试操作
r:运行到最近的断点处停下来,若没有断点,就运行出结果。
n:逐过程(将每一行指令都当作一个整体执行)。
s:逐语句(可以进入到函数内部)。
c:从一个断点运行到下一个断点。
finish:将一个函数运行结束,就停止。
until 行号:在一个范围内,直接运行到指定行。
bt:查看调用堆栈。
set var 变量名=需要修改的值:修改一个变量的内容(用来测多分支)。
#调试中查看参数信息
p 变量名:显示指定变量名的值(非常显示,只显示一次)。
p &变量名:显示指定变量名的地址(非常显示,只显示一次)。
display 变量名:常显示指定变量的值。
display &变量名:常显示指定变量的地址。
undisplay 断点编号:取消常显示。
这里举例说明一下断点失能问题。
断点的开启和禁用就看断点信息列表中的Enb参数,y表示开启,n表示禁用(失能)。
最后,如有不足,请各位大佬多多指正!!!