GDB 调试
一、简介
GDB 全称GNU symbolic debugger,是Linux下常用的调试器。
二 、gdb使用流程
程序示例 test.c
#include <stdio.h>
int main(int argc, char** argv) {
int i = 0;
int b = 0;
for (; i < 5; ++i) {
b++;
}
printf("%d\n", b);
return 0;
}
使用gcc test.c -o test -g
编译该程序, -g
选项使该编译后的文件是debug,可以进行调试,不然默认情况下gcc编译的文件是release的。
(1)gdb启动
gdb 被调试文件名 #进入调试
quit #退出调试
输入gdb test
进入调试,如果退出调试,则输入quit
(2)调试中查看源代码
list 或者 l 0 # 注:l是小写的L,GDB会记录最近一次命令,所以输入一次后可以直接回车继续显示,执行一次显示10行,显示完所有代码后会有提示
(3)开始调试
r # 开始调试该代码,如果没有断点,则直接运行结束
b 行号 # 对代码某行打断点
info b # 查看所有断点信息
d 编号 # 删除某个断点,编号是我们在info指令下查看的断点编号
n # 逐过程调试,相当于F10
s # 逐语句调试,相当于F11
p 变量名 # 在调试过程显示变量的变化
display 变量名 # 随着调试的进行常显示该变量
undisplay 编号 # 取消对该编号对应的变量常显示。注意:取消常显示是的指令对象是编号不是变量名。编号就是每一次变量显示值前面的那个数
c #运行到下一个断点处
(4)线程相关的调试
info threads # 显示当前程序处于哪一个线程中
t 线程id # 切换到指定线程执行
set scheduler-locking on # 锁定, 在当前线程下执行,不会被其他线程抢占CPU,直到该线程运行完成。
disassemble # 解析汇编指令, 显示当前接下来要执行的汇编指令
ni # 执行汇编下一条汇编指令