我有一个 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/