gdb
基础操作
list 或 l l 20
run 或 r:开始运行程序。如果程序需要输入参数:r arg1 arg2
|
断点管理
break 15 或 b 15:在第 15 行设断点。 b func_name:在进入某个函数时停下。 info breakpoints:查看所有断点。 delete 1:删除编号为 1 的断点。
|
推进执行 (Step/Next)
next (n): 单步执行(不进入函数内部,直接跳过)。 step (s): 单步执行(进入函数内部)。 continue (c): 继续运行,直到遇到下一个断点或程序结束。 finish: 运行完当前函数并返回到调用处。
|
查看变量 (Print/Watch)
print var (p var): 查看变量 var 的当前值。 display var: 每次程序暂停时都自动显示该变量。 watch var: 监视变量。一旦 var 的值发生变化,程序立即停下。
|
查看调用栈 (Backtrace)
*** bt *** 当程序崩溃(如段错误)时
backtrace (bt): 显示完整的函数调用链,告诉你程序是怎么一步步运行到当前报错位置的。
|
调试 Core Dump
当程序在后台异常终止时,系统会生成一个 core 文件(记录了内存快照)。
| 命令 |
缩写 |
功能 |
描述 |
| list |
l |
列出源码 |
查看当前行附近的源代码 |
| run |
r |
运行程序 |
开始运行程序 |
| break |
b |
设置断点 |
在指定位置设置断点 |
| next |
n |
逐过程 |
单步执行,跳过函数内部 |
| step |
s |
逐语句 |
单步执行,进入函数内部 |
| print |
p |
打印变量值 |
查看变量的当前值 |
| continue |
c |
继续执行 |
运行到下一个断点 |
| backtrace |
bt |
查看调用栈 |
显示函数调用链 |
vscode和gdbserver远程调试
- 远程终端进入程序目录
:1234 表示监听所有网卡的 1234 端口。
- 此时程序会进入等待状态,直到本地 VS Code 连接
- 本地 VS Code 配置调试文件
- 在 VS Code 中打开项目根目录,按下 F5,选择 C++ (GDB/LLDB),会生成一个 .vscode/launch.json 文件。将其内容修改为如下配置:
{ "version": "0.2.0", "configurations": [ { "name": "GDB Remote Debug", "type": "cppdbg", "request": "launch", "program": "${workspaceFolder}/app", "miDebuggerPath": "/usr/bin/gdb", "miDebuggerServerAddress": "192.168.1.100:1234", "cwd": "${workspaceFolder}", "externalConsole": false, "MIMode": "gdb", "setupCommands": [ { "description": "为 gdb 启用整齐打印", "text": "-enable-pretty-printing", "ignoreFailures": true } ], "sourceFileMap": { "/home/remote/project": "${workspaceFolder}" } } ] }
|