bazel - 在 Bazel 中构建后如何避免删除缓存文件

标签 bazel

我有一个 genrule在应该操作一些文件的 Bazel 中。我想我没有通过正确的路径访问这些文件,所以我想查看 Bazel 创建的目录结构,以便我可以调试。

我添加了一些 echo对我的 genrule 的声明,我可以看到 Bazel 在目录 /home/lyft/.cache/bazel/_bazel_lyft/8de0a1069de8d166c668173ca21c04ae/sandbox/linux-sandbox/1/execroot/ 中工作.但是bazel运行完后,这个目录就没有了,所以无法查看目录结构。

如何防止 Bazel 删除其临时文件,以便我可以调试正在发生的事情?

最佳答案

由于此问题是“在构建 bazel 后保留沙箱文件”Google 搜索和 it wasn't obvious for me 的最佳结果。从接受的答案来看,我觉得有必要写下这个答案。

简答

使用 --sandbox_debug .如果传递了此标志,则 Bazel 不会在构建完成后删除沙箱文件夹中的文件。

更长的答案

使用 --sandbox_debug 运行 bazel build选项:

$ bazel build mypackage:mytarget --sandbox_debug

然后,您可以检查项目的沙箱文件夹的内容。

要获取当前项目的沙箱文件夹的位置,请导航到项目,然后运行:
$ bazel info output_base
/home/johnsmith/.cache/bazel/_bazel_johnsmith/d949417420413f64a0b619cb69f1db69  # output will be something like this

在那个目录里面会有 sandbox文件夹。

可能的警告: (我对此不确定,但是)sandbox 中可能缺少某些文件。文件夹,如果您之前在没有 --sandbox_debug 的情况下运行构建flag 并且它部分成功了。原因是 Bazel 不会重新运行已经成功的构建部分,因此与成功构建部分对应的文件可能不会最终出现在沙箱中。

如果你想确保所有的沙箱文件都在那里,首先使用 bazel clean 清理项目。或 bazel clean --expunge .

关于bazel - 在 Bazel 中构建后如何避免删除缓存文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54543744/

相关文章:

firebase - 将 firebase 函数/ui 部署为 bazel 构建的一部分

android - 与 Gradle 相比,使用 Bazel 的额外优势是什么?

TensorFlow Bazel 构建失败

linux - 在 Intel Atom 上构建 Tensorflow 的错误

c++ - Bazel- 问题导入头文件

bazel - 禁用 bazel 中容易出错的功能

带有 gpu 支持安装错误的 Tensorflow - 指定的 --crosstool_top 不是有效的 cc_toolchain_suite 规则

cucumber - 如何将 cucumber 与bazel一起使用?

macros - Bazel 宏失败, `name ' glob' is not defined`

debugging - 我可以在 Bazel 测试中使用 Python 调试器吗