GDB
- GDB的那些奇淫技巧 -- 超级棒,涉及子进程调试、多线程调试,以及一大堆指令表
远程调试
Tips
- 获取指令帮助可随时运行 help, 比如
help run
- 需要有调试符号,gcc 或 g++ 编译时带
-g
参数 - 可用
file <your-file>
来查看是否带了调试符号 - gdb 里使用
info sharedlibrary
命令查看库符号加载 - 调试coredump 文件:
gdb appname core-name
- 调试进程:
gdb appname 1234
, 1234 为进程id - 带参数:
gdb --args app arg1 arg2
- 或者 gdb 启动后
set args arg1 arg2
- 或 run 时携带参数:
run arg1 arg2
- 查看参数
show args
- 查看所有断点
info breakpoints
- 删除对应序号断点:
delete 1
- 如果进入某个函数直接崩溃报错, bt栈只显示到该函数地址,很大可能是改函数内栈溢出(一般是8M),查看变量或数组是否过大。
- 崩溃时,查看变量:
bt
显示栈信息frame 0
进入最顶部栈info local
打印所有局部变量p <name>
打印某个变量,可打印全局变量
常用指令
指令 | 简写 | 说明 |
---|---|---|
help | h | 查看帮助文档 |
run | r | 执行程序 |
break | b | 打断点 |
info break | info b | 查看断点 |
step | s | 步进、进入内部 |
next | n | 执行下一行 |
bt | bt | 查看栈调用信息 |
p | 查看变量等 | |
list | l | 查看当前代码 |
info source | 查看当前源码文件 | |
info sources | 查看源码文件 | |
continue | c | 继续执行 |
where | 当前执行到哪 | |
quit | q | 退出gdb |