在 Ubuntu 下排查 C++ 内存泄漏,常用的方法和工具如下,从「最推荐」到「进阶」依次介绍。
sudo apt update
sudo apt install valgrind
-g)g++ -g -O0 main.cpp -o main
valgrind --leak-check=full --show-leak-kinds=all ./main
definitely lost:确定泄漏(重点看)indirectly lost:间接泄漏possibly lost:可能泄漏still reachable:程序退出时还指着(不一定算 bug)✅ 适合:本地调试、定位具体代码行
⚠️ 缺点:运行慢(10~50 倍)
g++ -fsanitize=address -g -O1 main.cpp -o main
./main
✅ 适合:开发阶段、CI
⚠️ 注意:
#include <mcheck.h>
int main() {
mtrace();
// your code
return 0;
}
g++ main.cpp -o main
export MALLOC_TRACE=./mtrace.log
./main
mtrace ./main ./mtrace.log
✅ 简单
❌ 功能弱,不如 Valgrind / ASan
new 没 deletestd::unique_ptr<int> p = std::make_unique<int>(10);
std::shared_ptr<int> q = std::make_shared<int>(20);
✅ 能在编码阶段避免 90% 泄漏
sudo apt install heaptrack
heaptrack ./main
heaptrack_gui heaptrack.main.*.gz
top
htop
pmap -x <pid>
| 场景 | 推荐 |
|---|---|
| 本地调试 | Valgrind |
| 开发阶段 | ASan |
| 轻量检测 | mtrace |
| 线上服务 | Heaptrack |
| 防泄漏 | 智能指针 |
如果你愿意,可以:
我可以帮你选最合适的方案并一步步排查。