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

如何在bazelrc中获取工作区目录以指定ASAN抑制文件

解决Bazel中指定ASAN抑制文件路径的问题

问题原因

.bazelrc中直接使用${workspace}或%workspace%不会被Bazel解析替换为工作区路径——--action_env的内容会直接传递给执行动作,Bazel不会处理其中的变量占位符,导致ASAN无法找到正确的抑制文件路径。

可行解决方案

方案1:使用Bazel内置环境变量BUILD_WORKSPACE_DIRECTORY

Bazel在执行构建动作时会自动设置BUILD_WORKSPACE_DIRECTORY环境变量,其值为工作区的绝对路径(即包含WORKSPACE文件的目录)。只需在.bazelrc中引用该变量即可:

build:debug --action_env='LSAN_OPTIONS=suppressions=${BUILD_WORKSPACE_DIRECTORY}/asan_leaks.supp'

用单引号包裹值,避免Bazel提前解析变量,确保变量在执行动作时由shell替换。

方案2:启动Bazel时手动传递工作区路径

如果偏好显式传递路径,可在执行bazel build/bazel run时,通过命令行直接注入工作区路径:

bazel build --config=debug --action_env="LSAN_OPTIONS=suppressions=$(bazel info workspace)/asan_leaks.supp" //your/target:name

$(bazel info workspace)会直接输出当前工作区的绝对路径,替换后传递给LSAN_OPTIONS。

方案3:将抑制文件作为构建依赖(需修改BUILD文件)

把asan_leaks.supp添加为目标的data依赖,构建时文件会被复制到execroot目录,此时可使用相对路径引用:

  1. 在目标的BUILD文件中添加依赖:
cc_binary(
    name = "mytest",
    srcs = ["mytest.cc"],
    data = ["//:asan_leaks.supp"], # 将抑制文件加入构建依赖
    # 其他配置项...
)
  1. 在.bazelrc中使用相对路径:
build:debug --action_env=LSAN_OPTIONS=suppressions=asan_leaks.supp

这种方式无需依赖环境变量,适合需要将抑制文件随构建产物分发的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 02:01:08