在 Ubuntu 上调试 C++ 程序,通常分为 编译阶段 和 调试阶段。下面给你一套从入门到常用的完整流程,适合大多数开发场景。
sudo apt update
sudo apt install build-essential gdb
g++:C++ 编译器gdb:GNU 调试器build-essential:包含 gcc、g++、make 等main.cpp#include <iostream>
int add(int a, int b) {
return a + b;
}
int main() {
int x = 10;
int y = 20;
int z = add(x, y);
std::cout << z << std::endl;
return 0;
}
-gg++ -g main.cpp -o main
✅ 必须加 -g,否则无法调试(看不到源码、变量名)
gdb ./main
| 命令 | 作用 |
|---|---|
run / r |
运行程序 |
break main |
在 main 函数打断点 |
break main.cpp:8 |
在第 8 行打断点 |
next / n |
单行执行(不进入函数) |
step / s |
进入函数 |
print x |
打印变量 x |
backtrace / bt |
查看调用栈 |
continue / c |
继续执行 |
quit |
退出 GDB |
(gdb) break main
(gdb) run
(gdb) next
(gdb) print x
(gdb) step
(gdb) bt
./main
如果崩溃:
Segmentation fault (core dumped)
ulimit -c unlimited
重新运行程序,会生成 core 文件。
gdb ./main core
然后:
bt
✅ 可以快速定位崩溃位置
sudo snap install code --classic
Run and Debug → create a launch.json示例 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",
"setupCommands": [
{
"description": "Enable pretty-printing",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}
✅ 支持断点、变量查看、调用栈,非常方便
cmake_minimum_required(VERSION 3.10)
project(demo)
set(CMAKE_BUILD_TYPE Debug)
add_executable(demo main.cpp)
mkdir build
cd build
cmake ..
make
然后:
gdb ./demo
✅ 打印调试(简单但有效)
std::cout << "x = " << x << std::endl;
✅ 条件断点
break main.cpp:10 if x == 10
✅ 查看内存
x/10xw &x
| 场景 | 推荐方式 |
|---|---|
| 学习 / 小项目 | GDB |
| 大型项目 | VS Code + GDB |
| 崩溃问题 | core dump + GDB |
| CMake 项目 | CMake + Debug 模式 |
如果你愿意,可以告诉我:
我可以给你更针对性的调试方案。