find . -name “*.[ch]” | xargs grep “#include” | sort | uniq

gdb

l(list) 行号/函数名 —— 显示对应的code,每次10行

r(run) —— F5【无断点直接运行、有断点从第一个断点处开始运行】

b(breakpoint) + 行号 —— 在那一行打断点

b 源文件:函数名 —— 在该函数的第一行打上断点

b 源文件:行号 —— 在该源文件中的这行加上一个断点

info b —— 查看断点的信息 num编号 type类型 disp转态 address 地址 what 函数行

breakpoint 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 —— 标记跟踪 display i 每次n查看【变量/结构体…】

undisplay + 变量名编号 —— 取消对先前设置的那些变量的跟踪

排查问题三剑客

until + 行号 —— 进行指定位置跳转,执行完区间代码

finish —— 在一个函数内部,执行到当前函数返回,然后停下来等待命令

c(continue) —— 从一个断点处,直接运行至下一个断点处【VS下不断按F5】