title: “GDB”
date: 2026-03-15 13:28:16
categories:
GDB是Linux下非常好用且强大的调试工具。GDB可以调试C、C++、Go、java、 objective-c、PHP等语言。对于GDB调试器来说,不像VS编译器中那样的图形化界面形式,而是采用纯命令行的形式进行调试。
何为调试
调试: 就是让代码一步一步慢慢执行,跟踪程序的运行过程。比如,可以让程序停在某个地方,查看当前所有变量的值,或者内存中的数据;也可以让程序一次只执行一条或者几条语句,看看程序到底执行了哪些代码。帮助我们发现代码中的错误,改进代码。
一般来说,GDB 主要能够提供以下四个方面的帮助:程序启动时,可以按照自定义的要求运行程序,例如设置参数和环境变量;可以让被调试的程序在所指定的代码处暂停运行,并查看当前运行状态 (例如当前变量的值,函数的执行结果),即支持断点调试\n当程序被停住时,可以检查当前程序的中的变量的状态;\n在程序执行过程中,可以改变某个变量的值,还可以改变代码的执行顺序,从而尝试修改程序中出现的逻辑错误。
总结
:程序的发布方式有两种,debug模式和release模式
:Linux gcc/g++出来的二进制程序,默认是release模式
:要使用gdb调试,必须在源代码生成二进制程序的时候, 加上-g选项
注:()括号里面是该指令的全称
l(list) 行号/函数名 —— 显示对应的code,每次10行
r(run) —— F5【无断点直接运行、有断点从第一个断点处开始运行】
b(breakpoint) + 行号 —— 在那一行打断点
b 源文件:函数名 —— 在该函数的第一行打上断点
b 源文件:行号 —— 在该源文件中的这行加上一个断点吧
info b —— 查看断点的信息\nbreakpoint already hit 1 time【此断点被命中一次】
d(delete) + 当前要删除断点的编号 —— 删除一个断点【不可以d + 行号】
若当前没有跳出过gdb,则断点的编号会持续累加d + breakpoints —— 删除所有的断点
disable b(breakpoints) —— 使所有断点无效【默认缺省】
enable b(breakpoints) —— 使所有断点有效【默认缺省】
disable b(breakpoint) + 编号 —— 使一个断点无效【禁用断点】
enable b(breakpoint) + 编号 —— 使一个断点有效【开启断点】
相当于VS中的空断点
enable breakpount —— 使一个断点有效【开启断电】
n(next) —— 逐过程【相当于F10,为了查找是哪个函数出错了】
s(step) —— 逐语句【相当于F11,】
bt —— 看到底层函数调用的过程【函数压栈】
set var —— 修改变量的值
p(print) 变量名 —— 打印变量值
display —— 跟踪查看一个变量,每次停下来都显示它的值【变量/结构体…】
undisplay + 变量名编号 —— 取消对先前设置的那些变量的跟踪\n\n排查问题三剑客🗡
until + 行号 —— 进行指定位置跳转,执行完区间代码
finish —— 在一个函数内部,执行到当前函数返回,然后停下来等待命令
c(continue) —— 从一个断点处,直接运行至下一个断点处【VS下不断按F5】