You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在LeakSanitizer中抑制alloc-dealloc-mismatch错误?

解决Boost库引发的AddressSanitizer分配-释放不匹配错误的抑制方法

先明确错误归属

你遇到的alloc-dealloc-mismatch错误是**AddressSanitizer(ASAN)**报出的,并非LeakSanitizer(LSAN)——LSAN仅负责内存泄漏检测,分配释放不匹配属于ASAN的内存错误检测范畴。另外,-fsanitize=address已经集成了LSAN的功能,无需同时添加-fsanitize=leak,这是你混淆配置的根源。

正确的抑制步骤

1. 创建ASAN抑制文件

新建一个抑制文件(比如命名为asan_suppressions.supp),根据错误栈选择以下任意一种规则写入:

规则一:针对具体出错函数

精准抑制boost::filesystem::path析构函数引发的错误:

alloc-dealloc-mismatch:*boost::filesystem::path::~path*

规则二:针对整个Boost文件系统库

如果该库还有其他同类错误,可直接抑制整个库:

alloc-dealloc-mismatch:*libboost_filesystem.so*

(若Boost为静态链接,可调整为匹配静态库路径或更宽泛的*boost_filesystem*)

2. 运行程序时加载抑制规则

通过环境变量指定抑制文件后运行程序:

ASAN_OPTIONS=suppressions=asan_suppressions.supp ./你的程序名

为什么之前的尝试失败

  • 用LSAN的leak:boost规则无效:因为此错误不是内存泄漏,LSAN规则对ASAN的分配释放不匹配错误无作用。
  • 直接写alloc-dealloc-mismatch:boost格式错误:ASAN的错误类型抑制规则需要用通配符*包裹匹配模式,确保能匹配到栈帧中的函数或库名。
  • 使用interceptor_via_fun等ASAN拦截器规则:这类规则用于抑制函数拦截相关的错误,不适用于alloc-dealloc-mismatch这类内存错误类型。

内容的提问来源于stack exchange,提问作者ventsyv

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 15:39:22