在 Ubuntu 下用 C++ 调试程序,通常分为 编译带调试信息 → 使用调试器 → 常见调试手段 几个步骤。下面给你一套实用流程。
用 g++ 编译时一定要加 -g:
g++ -g -O0 main.cpp -o main
说明:
-g:生成调试信息-O0:关闭优化(否则变量可能被优化掉,调试困难)如果是 CMake 项目:
cmake -DCMAKE_BUILD_TYPE=Debug ..
make
gdb ./main
| 命令 | 作用 |
|---|---|
run / r |
运行程序 |
break main |
在 main 函数设断点 |
break file.cpp:20 |
在某一行设断点 |
next / n |
单步执行(不进函数) |
step / s |
单步进入函数 |
print x / p x |
打印变量 |
backtrace / bt |
查看调用栈 |
continue / c |
继续执行 |
quit / q |
退出 |
示例:
(gdb) break main
(gdb) run
(gdb) n
(gdb) p x
(gdb) bt
gdb ./main
run
崩溃后输入:
bt
可以看到是哪一行导致段错误。
ulimit -c unlimited
运行程序后生成 core 文件。
gdb ./main core
bt
gdblaunch.json{
"version": "0.2.0",
"configurations": [
{
"name": "C++ Debug",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/main",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb"
}
]
}
然后直接点“调试”。
std::cout << "x = " << x << std::endl;
sudo apt install cppcheck
cppcheck main.cpp
sudo apt install valgrind
valgrind ./main
如果你愿意,可以告诉我:
我可以给你更具体的调试示例。