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 |