在 Ubuntu 上调试 C++ 代码,常见且高效的流程如下(从基础到进阶):
一定要加调试信息(-g),并关闭过度优化
g++ -g -O0 main.cpp -o main
-g:生成调试符号-O0:不使用优化(否则变量可能被优化掉)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 ./main
run
# 崩溃后
bt
可快速定位哪一行出错。
sudo apt install gdb
code .
launch.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"
}
]
}
set(CMAKE_BUILD_TYPE Debug)
set(CMAKE_CXX_FLAGS_DEBUG "-g -O0")
构建:
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Debug ..
make
gdb ./your_program
#include <iostream>
std::cerr << "x = " << x << std::endl;
或用 spdlog、glog 等库。
-g 或开了 -O2info threads、thread 2如果你愿意,可以告诉我:
我可以给你更针对性的调试方案。