如何通过 'ctx.actions.run(...)' 调试由 Bazel 规则执行的 'java_binary' 目标?
How do I debug a 'java_binary' target executed by a Bazel rule via 'ctx.actions.run(...)'?
我的工作区中有一个 java_binary
目标,稍后我将其作为可执行文件传递给规则内的 ctx.actions.run
。到目前为止一切顺利。
现在我想在 Bazel 执行规则时调试此 java_binary
。为了附加调试器,我需要在调试模式下使用 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 在构建过程中打印出所有 运行ning 的命令。然后找到与您感兴趣的 java_binary
调用对应的命令行。然后您可以 copy/paste 该命令(包括 cd
部分)并修改它以包含调试标志,并像调试任何其他进程一样对其进行调试。
另请注意,java_binary
输出包含 --debug[=<port>]
标志的包装脚本,因此这应该是所有需要添加到命令行的内容。
另请注意,--subcommands
只会打印构建期间实际执行的命令,因此完全缓存/完全增量构建将不会打印任何内容。您可能需要执行 clean
,或删除您感兴趣的操作的一些输出,以便 bazel 运行 使用该命令。
看来您可以在 --
之后将 --jvm_flag
选项作为程序选项的一部分传递。
构建:
java_binary(
name = "extract",
main_class = "com.pkg.Main",
resources = glob(["src/main/resources/**/*"]),
)
命令行界面:
bazel run //:extract -- --jvm_flag="-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=7942" -path %cd%\config.json
似乎 --jvm_flag
选项需要紧跟在 --
之后,在程序选项之前(示例中的 -path
)。这是 Bazel 3.7.0.
我的工作区中有一个 java_binary
目标,稍后我将其作为可执行文件传递给规则内的 ctx.actions.run
。到目前为止一切顺利。
现在我想在 Bazel 执行规则时调试此 java_binary
。为了附加调试器,我需要在调试模式下使用 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 在构建过程中打印出所有 运行ning 的命令。然后找到与您感兴趣的 java_binary
调用对应的命令行。然后您可以 copy/paste 该命令(包括 cd
部分)并修改它以包含调试标志,并像调试任何其他进程一样对其进行调试。
另请注意,java_binary
输出包含 --debug[=<port>]
标志的包装脚本,因此这应该是所有需要添加到命令行的内容。
另请注意,--subcommands
只会打印构建期间实际执行的命令,因此完全缓存/完全增量构建将不会打印任何内容。您可能需要执行 clean
,或删除您感兴趣的操作的一些输出,以便 bazel 运行 使用该命令。
看来您可以在 --
之后将 --jvm_flag
选项作为程序选项的一部分传递。
构建:
java_binary(
name = "extract",
main_class = "com.pkg.Main",
resources = glob(["src/main/resources/**/*"]),
)
命令行界面:
bazel run //:extract -- --jvm_flag="-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=7942" -path %cd%\config.json
似乎 --jvm_flag
选项需要紧跟在 --
之后,在程序选项之前(示例中的 -path
)。这是 Bazel 3.7.0.