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 |