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

如何通过Bazel抑制MSan报错?求简便方案及参考项目

在Bazel中简便抑制MSan第三方库报错的方案

核心方案:利用Clang环境变量传递忽略列表

无需修改所有目标或编写复杂工具链,通过Clang原生支持的CLANG_SANITIZER_IGNORELIST环境变量,可快速将忽略列表应用到所有编译动作中:

  1. 创建MSan忽略列表文件
    在项目根目录下新建msan_ignorelist.txt,根据需要添加忽略规则,示例:
# 忽略Google Protobuf相关错误
src:*protobuf*
# 忽略GTest相关错误
src:*gtest*
# 可按符号/路径细化规则,比如忽略特定函数
fun:*protobuf::Internal*

规则可通过通配符匹配第三方库的路径、符号或函数,语法遵循Clang Sanitizer忽略列表规范。

  1. 修改bazelrc配置
    在已有的MSan配置块中添加环境变量设置:
build:msan --copt=-fsanitize=memory
build:msan --copt=-fno-omit-frame-pointer
build:msan --copt=-g
build:msan --linkopt=-fsanitize=memory
build:msan --linkopt=-g
test:msan --test_env=MSAN_SYMBOLIZER_PATH=/path/to/llvm-symbolizer
# 传递忽略列表路径给Clang
build:msan --action_env=CLANG_SANITIZER_IGNORELIST=$(pwd)/msan_ignorelist.txt

--action_env会将环境变量注入所有Bazel编译动作中,Clang会自动读取该变量并应用-fsanitize-ignorelist参数,无需手动为每个目标添加依赖。

补充说明

如果项目涉及远程构建或路径动态变化,可将msan_ignorelist.txt作为data依赖添加到项目顶层的cc_library或test_suite目标中,确保Bazel能追踪到文件路径:

cc_library(
    name = "project_root",
    data = ["msan_ignorelist.txt"],
    visibility = ["//visibility:public"],
)

此时bazelrc中的路径可改为$(BAZEL_WORKSPACE)/msan_ignorelist.txt。

参考项目实践

不少基于Bazel的大型项目(如TensorFlow、LLVM)均采用环境变量方式配置Sanitizer忽略列表,避免了修改大量目标或编写复杂工具链的成本,与OpenXLA生态的构建模式兼容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.11 18:42:14