gpt4 book ai didi

bazel - 如何调试由 Bazel 规则通过 'java_binary' 执行的 'ctx.actions.run(...)' 目标?

转载 作者:行者123 更新时间:2023-12-05 05:05:30 25 4
gpt4 key购买 nike

我的工作区中有一个 java_binary 目标,稍后我将其作为可执行文件传递给规则内的 ctx.actions.run。到目前为止一切顺利。

现在我想在 Bazel 执行规则时调试此 java_binary。为了附加调试器,我需要在 Debug模式下运行 java_binary。到目前为止,我唯一想到的就是在 java_binary 上设置 jvm_flags。我能够让它工作。但我想知道是否有一种方法可以从命令行实现它,而不是将其烘焙到 java_binary 中。

java_binary(
...
jvm_flags = [
"-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=8000"
],
)

是否可以从命令行实现这一点而无需对 jvm_flags 进行硬编码?

最佳答案

尝试:

bazel run //:my-target -- --debug

一种策略是使用 --subcommands 运行构建,这将告诉 bazel 打印出它在构建期间运行的所有命令。然后找到java_binary的调用对应的命令行您感兴趣。然后您可以复制/粘贴该命令(包括 cd 部分)并修改它以包含调试标志,然后像调试任何其他进程一样调试它。

另请注意 java_binary输出包含 --debug[=<port>] 的包装器脚本标志,所以这应该是所有需要添加到命令行的内容。

另请注意 --subcommands只会打印构建期间实际执行的命令,因此完全缓存/完全增量构建不会打印任何内容。您可能需要做一个 clean ,或删除您感兴趣的操作的一些输出,以便 bazel 运行该命令。

关于bazel - 如何调试由 Bazel 规则通过 'java_binary' 执行的 'ctx.actions.run(...)' 目标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60455916/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com