【问题标题】:Enable java remote debug in code在代码中启用 java 远程调试
【发布时间】:2017-09-30 09:59:38
【问题描述】:

例如,我们可以通过在命令行中添加以下内容来启用 java 远程调试。

-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005

但我的应用程序在 yarn 中运行,我不确定哪个端口可用。

所以我想在我的代码中启用 java 调试。

首先我检测到一个可用端口并登录我的程序,然后我可以使用这个端口来调试我的应用程序。

【问题讨论】:

标签: java remote-debugging


【解决方案1】:

地址属性指定主机(可选)和端口(如果没有主机,则仅指定端口)。因此,address=5005 在您的情况下指定端口 5005。如果您希望程序等到您连接调试器后,请将suspend=n 切换为suspend=y

编辑: 也许我误解了你的问题。如果您想以编程方式启用调试,这是不可能的,因为调试工具 JPDA 没有公开 Java API,也没有任何其他方式来以编程方式启动和停止它。

【讨论】:

  • 所以不可能做到这一点?
  • 如前所述:不,在 JVM 启动程序后无法启动调试器。停止调试器也是如此。
【解决方案2】:

我不确定这是否可以通过代码完成;但是根据an answer to this old question可以使用jsadebugd为已经运行的JVM启用调试

如上述答案中所述,该功能被标记为实验性且不受支持,因此您的里程可能会有所不同。

【讨论】:

  • jsadebugd 可以远程连接一些调试工具,如 jmap、jinfo 和 jstack。它们在某些调试领域有所帮助,但与 jpda jdb 不同。顺便说一句,可以将 jdb 连接到任何正在运行的进程(无论 -agentlib:jdwp... 设置如何),但这可用于检查一些事情并冻结正在运行的应用程序。不确定这是否是这个问题的作者想要做的。
猜你喜欢
  • 2015-09-27
  • 1970-01-01
  • 2014-03-16
  • 2016-01-22
  • 2013-08-03
  • 2012-03-23
  • 2023-03-14
  • 2014-01-01
  • 2011-06-17
相关资源
最近更新 更多