一、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 |