在 Ubuntu 上调试 C++ 代码,通常分为编译阶段和调试阶段。下面给你一套常用、实用的做法,从入门到进阶都有。
sudo apt update
sudo apt install build-essential gdb
g++:C++ 编译器gdb:调试器make:构建工具g++ -g -O0 main.cpp -o main
参数说明:
-g:生成调试信息(必须)-O0:关闭优化(否则变量可能被优化掉)❌ 不要这样:
g++ main.cpp -o main
gdb ./main
| 命令 | 作用 |
|---|---|
run |
运行程序 |
break main |
在 main 函数打断点 |
break 12 |
在第 12 行打断点 |
next |
单步执行(不进入函数) |
step |
单步执行(进入函数) |
print x |
打印变量 x |
backtrace |
查看调用栈 |
continue |
继续执行 |
quit |
退出 |
break main
run
next
print a
backtrace
gdb ./main
run
崩溃后:
backtrace
ulimit -c unlimited
./main
gdb ./main core
sudo apt install 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"
}
]
}
按 F5 即可图形化调试。
#include <iostream>
std::cout << "x = " << x << std::endl;
适合:
<optimized out>✅ 解决:
g++ -g -O0
sudo apt install libxxx-dev
info threads
thread 2
valgrind:内存泄漏sanitizer:g++ -fsanitize=address -g main.cpp
如果你愿意,可以告诉我:
我可以直接帮你写调试示例。