
gdb 调试前提是需要保留符号表。对于 C/C++ 等使用 gcc 进行编译的语言,编译时增加-g选项。对于 go 语言,则增加-ldflags=-compressdwarf=false 、-gcflags=all="-N -l"等选项。
| 命令 | 缩写 | 子命令 | 描述 | 示例 |
|---|---|---|---|---|
| help | h | 显示目标命令的帮助信息 | (gdb) h start | |
| file | 加载待调试的可执行文件 | (gdb) file /root/main_cpp | ||
| quit | q | 退出gdb | (gdb) q | |
| show | listsize | 返回list命令单次显示的源代码行数 | (gdb) show listsize | |
| args | 显示调试程序的启动参数 | (gdb) show args | ||
| set | listsize | 设置list命令单次显示的源代码行数 | (gdb) set listsize 20 | |
| args | 设置调试程序启动参数 | (gdb) set args –config /root/config.json | ||
| list | l | 显示指定位置的源代码 | (gdb) l(gdb) l 7(gdb) l showFunc(gdb) l hello.cpp:7(gdb) l main.cpp:showFunc | |
| break | b | 设置断点/条件断点 | (gdb) b 9(gdb) b showFunc(gdb) b main.cpp:13(gdb) b main.cpp:showFunc(gdb) b showFunc if a==10 | |
| delete | d | 删除断点 | (gdb) d 1(gdb) d 2 3(gdb) d 4-7 | |
| breakpoints | 删除所有断点 | (gdb) delete breakpoints | ||
| disable | 使断点失效 | (gdb) disable 10 | ||
| enable | 使失效断点重新有效 | (gdb) enable 10 | ||
| info | i | break | 显示断点 | (gdb) i b |
| stack | 显示堆栈信息 | (gdb) i s | ||
| frame | 显示当前栈帧详细信息 | (gdb) info frame | ||
| args | 显示当前栈帧的入参 | (gdb) info args | ||
| locals | 显示当前栈帧的所有局部变量 | (gdb) info locals | ||
| start | 运行程序并在第一条语句处暂停 | (gdb) start | ||
| run | r | 运行程序并在首个断点处暂停 | (gdb) r | |
| next | n | 下一步(step over) | (gdb) n | |
| step | s | 下一步(step into) | (gdb) s | |
| finish | 跳出当前堆栈帧(step out) | (gdb) finish | ||
| continue | c | 继续执行并直至下一个断点处 | (gdb) c | |
| backtrace | bt | 显示当前函数调用栈 | (gdb) bt | |
| p | 显示变量的值 | (gdb) print v(gdb) print &v | ||
| whatis | 显示变量/表达式的数据类型 | (gdb) whatis v(gdb) whatis &v |