是否有一种编程方式可以在正在运行的 JVM 实例中打开调试?我正在寻找一种 API,它可以使运行的 JVM 成为调试服务器。API 相当于
-Xdebug -Xrunjdwp:transport=dt_socket,address=<host:port>,server=y,suspend=n.
您可以使用Visual VM附加到任何正在运行的 JVM 。请务必下载 1.3.2 版并安装所有插件。
提问者所指的调试端口用于源代码调试,例如使用 Eclipse 调试器。VisualVM 的端口是 JMX 端口,它采用一组不同的 JVM 选项。但也有例外: JRockit 的 Mission Control 使用 jdwp 端口而不是 JMX 端口。
是的,您可以在代码中动态加载 JMX 调试器。它很复杂,但我相信OSGI可以动态加载它。 例如,这里是对 Jetty 项目执行此操作的参考。
这是不可能的。JVM 必须从一开始就知道它处于调试模式。它的运行速度会慢一些,但会为外部进程提供调试信息和断点,这在 JVM 已经启动时是不可能的。