一、Linux 调试背景
linux发布的程序由debug和release两个版本,但在Linux环境下生成的程序默认为release版本。但一份代码需要被调试,该代码的发布模式必须是debug。所以在在使用g++编译代码时,需要额外增加-g
选项。
gdb常见命令集
二 、进入、退出调试、显示源代码
指令 | 功能 |
gdb + 二进制文件(debug模式生成的) |
开始调试该文件对应的源文件 |
quit |
退出调试 |
l(或list)+ number |
从number位置开始显示源代码,每次打印10行;由于gdb会记录最近的历史指令 ,所以直接回车会接着打印源代码 。 |
l(或list)+ 函数名 |
列出该函数的代码源 |
until + number |
跳至number行 |
三、 程序执行操作
指令 | 功能 |
r(或ruun) |
开始调试,类似于vs编译器中的F5 ,即如果程序中断点,则在程序运行中的第一个断点出停止,否则直接运行结束 |
c (或Continue或continue) |
从一个断点直接运行到下一个断点 |
n (或next) |
逐过程 ,类似于vs编译器中的F10 |
s (或step) |
逐语句 ,类似于vs编译器中的F11 |
fiinish |
运行到当前函数的结尾 |
四、断点生成、删除
指令 | 功能 |
b(或break) + number、file:number 两种方式 |
在文件的number行打断点 |
b(或break) + function、file:function 两种方式 |
在函数function中的第一行有效代码 出打断点 |
d(或delete) + breakpoints) | 删除所有断点 |
d(或delete) + n |
删除 序号为n所对应的断点 |
info + b |
查看所有断点信息 |
enable + 断点序号 | 开启断点,即让禁止断点重新发挥断点作用 |
disable + 断点序号 | 禁止断点,即该断点依然存在,但不起任何作用 |
五、其他
指令 | 功能 |
bt (或breaktrace) | 调用堆栈 |
p + 变量 | 显示变量的值 |
display + 变量 | 常显示某个变量,类似于vs中的监视中的窗口,在后续调试过程中该变量的值会一直显示,直到程序结束 |
undisplay + 变量所对应的序号 | 取消常显示 |
set + var + 变量 = num | 将变量的值修改为num |