在运行的JVM中打开调试的Java API

4
有没有一种编程的方式可以在运行中的JVM实例中打开调试?我正在寻找一个API,该API将使运行中的JVM成为一个调试服务器。该API将执行与以下代码等效的操作:
-Xdebug -Xrunjdwp:transport=dt_socket,address=<host:port>,server=y,suspend=n. 
3个回答

2
提问者所指的调试端口是用于源代码调试,例如使用Eclipse调试器。VisualVM的端口是JMX端口,需要不同的JVM选项。但也有例外情况:JRockit的Mission Control使用jdwp端口而不是JMX端口。
另外,是的,您可以在代码中动态加载JMX调试器。虽然比较复杂,但OSGI可以动态加载它。例如,这里有一个Jetty项目的参考示例。

2
你可以使用Visual VM 连接到任何正在运行的JVM。确保下载版本1.3.2并安装所有插件。

+1 正确!这应该至少在 JVM 在与 VisualVM 相同的用户下启动时有效(或者权限适当)。 - Daniel

1

这是不可能的。JVM必须从一开始就知道它处于调试模式。虽然它运行得比较慢,但可以为外部进程提供调试信息和断点,而当JVM已经启动时则不可能实现。


丹尼尔,我同意。我希望有这样的API存在。为了实现我的目标,我完全假设目标JVM尚未处于调试模式,并且我将设法在其中执行一些代码,以将该VM切换到调试模式。在我知道VM已开始侦听的确切端口号之后,我将把该信息写入众所周知的位置,调试器用户将查询并用于将其调试器附加到该VM。 - Ranjit Iyer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接