发布于2026-06-30 阅读(0)
扫一扫,手机访问
在Debian系统上搞C++开发,内存泄漏这事儿迟早得面对。排查起来其实有不少趁手的工具,下面这几种方法算是经得起实战检验的,可以根据项目场景灵活选。

Valgrind在内存调试圈子里几乎就是代名词,功能全、文档多、社区活跃,适合做深度排查。
sudo apt-get updatesudo apt-get install valgrind
编译程序时记得加上 -g 把调试信息带进去:
g++ -g -o myprogram myprogram.cpp
然后跑一下Valgrind,开启泄漏全面检查:
valgrind --leak-check=full ./myprogram
它会把泄漏的内存块、分配位置、调用堆栈都给你列出来,一目了然。
AddressSanitizer(ASan)是编译器的内置检测器,速度比Valgrind快不少,尤其适合集成到持续集成流程中。
编译时加一个 -fsanitize=address 就行:
g++ -fsanitize=address -g -o myprogram myprogram.cpp
跑起来之后,ASan会自动拦截内存泄漏、越界访问等问题,报告风格很详细。
Dr. Memory跟Valgrind类似,但在某些场景下表现更轻量,接口也略有差异。
sudo apt-get updatesudo apt-get install drmemory
一样先编译带 -g 的程序:
g++ -g -o myprogram myprogram.cpp
然后运行:
drmemory ./myprogram
它会输出内存分配统计、潜在泄漏点,以及一些运行时错误。
LeakSanitizer其实是AddressSanitizer的一部分,专门盯着泄漏问题。
编译时多加一个 -fno-omit-frame-pointer 以保留完整调用栈:
g++ -fsanitize=address -fno-omit-frame-pointer -g -o myprogram myprogram.cpp
运行时,LeakSanitizer会自动捕获并报告泄漏点,效果很直接。
如果只推荐一个,Valgrind仍然是首选——功能全面、文档成熟、绝大多数场景都能胜任。但如果对运行速度有要求,或者需要集成到自动化测试中,AddressSanitizer和LeakSanitizer会更高效。Dr. Memory则适合作为备选方案,特别是在Valgrind不太方便的环境下。归根结底,工具都在那,试两次就知道哪个顺手了。
上一篇:Debian C++环境搭建步骤
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8