Ubuntu下用Valgrind排查内存泄漏遇ASan库加载错误求解决
解决ASan与Valgrind冲突导致的初始化错误
核心问题:AddressSanitizer(ASan)和Valgrind是两套独立的内存检测机制,不能同时启用。你第一次编译后能成功运行,大概率是编译缓存未更新、选项未真正生效;修改程序后重新编译,编译选项正确应用,两者的冲突就触发了报错。
可行解决方案:
- 仅用Valgrind排查泄漏
- 从CMake配置中移除
-fsanitize=address和-fsanitize=leak编译选项 - 编译时添加
-g选项生成调试信息,让Valgrind能输出精准的泄漏位置 - 运行命令:
valgrind --leak-check=full ./your_program
- 从CMake配置中移除
- 仅用ASan排查泄漏(检测效率远高于Valgrind)
- 保留
-fsanitize=address编译选项,无需使用Valgrind - 编译时同样添加
-g选项 - 直接运行程序
./your_program,ASan会自动检测内存泄漏、越界等问题,并输出详细报告
- 保留
- 强制尝试共存(不推荐,兼容性差)
- 先通过
find /usr/lib -name libasan.so.5确认libasan的实际路径 - 运行时执行:
LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libasan.so.5 valgrind ./your_program,但仍可能出现不可预知的问题
- 先通过
- 仅用Valgrind排查泄漏
内容的提问来源于stack exchange,提问作者waly karim
相关产品推荐
相关产品推荐

