| r (run) | 运行程序 | 
| b (breakpoint) | 打断点,比如 b func(打到函数) b 5(打到第5行)(当前文件) b main.cpp:5(main.cpp的第5行) b MyClass::func() (打到类的成员函数func()、在类内可以 p this 打印、p *this、p this->name) | 
| tb (temporary breakpoint) | 临时断点,用法同 b | 
| c (continue) | 继续执行代码,直到下一个断点 | 
| n (next) | 执行下一行代码,但是不会进入函数内部 | 
| s (step) | 执行下一行代码,并进入函数内部 (单步调试) 如果陷入步进后,可以按c跳出继续执行代码 | 
| p (print) | 打印变量的值 | 
| bt (backtrace) | 打印函数调用栈 | 
| f (finish) | 执行到当前函数返回为止 | 
| d (delete) | 删除断点,d <breakpoint number> 删除指定断点 d 删除所有断点 | 
| cl (clear) | 同delete,也是删除断点,cl <breakpoint number> 删除指定断点 cl 删除所有断点 | 
| watch | 监视一个变量或者一段内存 比如监视 n => watch n 条件监视 => watch n if n >= 2 | 
| awatch | 监视写 | 
| rwatch | 监视读 | 
| g 或 k | 退出调试器 | 
| tui enable | 吊炸天的图形界面调试 | 
| layout src | 同为吊炸天的图形界面调试 | 
| layout asm | 显示为汇编语言 | 
| u (until) | 快速运行完当前的循环体,并运行至循环体外停止 | 
| i b | 查看断点信息,相当于 info breakpoints | 
一些小技巧
- gdb的带参调试:先正常进入gdb调试模式:gdb build/main,然后 run 的时候带参进入,如 r -l -a -o a.txt 等。
这样第二次 run 的时候会带同样的参数
- 启动 gdb 调试的时候,使用命令 gdb "build main" -ex 'b main',这样启动后会自动跳转到main函数

- 同理,也可以通过刚才的 -ex 命令指定多个命令
调试配置的保存
- 进入gdb调试模式后,比如设置了一些断点后,想要把这些配置保存下来 (这里主要指断点的设置),则
save breakpoints codingai.gdb,然后下次再进入调试时加载 source codingai.gdb,这样就重新把调试配置加载进来了
要在两个不同的终端调试
先启一个 main,然后到另一个终端
查找进程pid
ps -A | grep main
# 或
pidof main
# 比如 312312则继续,在另一个终端中
sudo gdb
# 加载符号
attach 312312接下来可以正常调试,且两个终端之间是不影响的



















