在代码中启用 java 远程调试
Enable java remote debug in code
例如,我们可以通过在命令行中添加以下内容来启用java远程调试。
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
但是我的应用程序是运行 in yarn,我不确定哪个端口可用。
所以我想在我的代码中启用 java 调试。
首先我检测到一个可用的端口并登录我的程序,然后我可以使用这个端口来调试我的应用程序。
地址 属性 指定主机(可选)和端口(如果主机被遗漏,则仅指定端口)。因此 address=5005
在您的情况下指定端口 5005。如果您希望您的程序等到您连接调试器,请将 suspend=n
切换为 suspend=y
。
编辑:
也许我误解了你的问题。如果您想以编程方式启用调试,这是不可能的,因为调试工具 JPDA 没有公开 Java API 也没有任何其他方式以编程方式启动和停止它。
我不确定这是否可以通过代码完成;然而根据 an answer to this old question, it is possible to enable debugging for an already-running JVM using jsadebugd
如上述回答中所述,该功能标记为实验性且不受支持,因此您的情况可能会有所不同。
例如,我们可以通过在命令行中添加以下内容来启用java远程调试。
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
但是我的应用程序是运行 in yarn,我不确定哪个端口可用。
所以我想在我的代码中启用 java 调试。
首先我检测到一个可用的端口并登录我的程序,然后我可以使用这个端口来调试我的应用程序。
地址 属性 指定主机(可选)和端口(如果主机被遗漏,则仅指定端口)。因此 address=5005
在您的情况下指定端口 5005。如果您希望您的程序等到您连接调试器,请将 suspend=n
切换为 suspend=y
。
编辑: 也许我误解了你的问题。如果您想以编程方式启用调试,这是不可能的,因为调试工具 JPDA 没有公开 Java API 也没有任何其他方式以编程方式启动和停止它。
我不确定这是否可以通过代码完成;然而根据 an answer to this old question, it is possible to enable debugging for an already-running JVM using jsadebugd
如上述回答中所述,该功能标记为实验性且不受支持,因此您的情况可能会有所不同。