LLVM 13 Windows环境下ASAN屏蔽外部库报错配置无效问题
问题原因及解决方案
规则类型使用错误
你当前配置的interceptor_via_fun、interceptor_via_lib属于拦截器旁路规则,作用是让ASAN跳过对指定函数/库的内存操作拦截,并非用来抑制已触发的报错输出,二者功能完全不同。你需要使用专门的报错抑制规则。正确的抑制规则写法
针对你遇到的bad-free类型报错,抑制规则语法如下,直接写入my_asan.supp文件即可:
# 抑制python310.dll触发的bad_free报错 free:python310.dll
如果需要匹配所有外部库的同类型报错,可写free:*,但不推荐该做法,会遗漏你自己开发代码的内存问题。
- Windows环境配置注意事项
- 不要在抑制规则/拦截规则中添加ASAN自身运行时库(
clang_rt.asan_dynamic-x86_64.dll)、系统内核库(ntdll.dll、KERNEL32.DLL),添加后会导致ASAN功能异常,无法正常执行抑制逻辑,你配置文件中这部分规则可以全部删除。 - 加载抑制文件时要确保路径正确:如果使用相对路径,需要保证
my_asan.supp放在程序运行的当前工作目录下;也可以直接写绝对路径避免出错。 - 环境变量设置方式要适配终端:cmd下使用
set ASAN_OPTIONS=suppressions=my_asan.supp,PowerShell下使用$env:ASAN_OPTIONS="suppressions=my_asan.supp"。
- 不要在抑制规则/拦截规则中添加ASAN自身运行时库(
内容的提问来源于stack exchange,提问作者Cesc
相关产品推荐
相关产品推荐

