Java JVMTI不能与-Xdebug -Xrunjdwp一起使用

我花了最后4个小时尝试在必须远程运行的Tomcat实例上设置Eclipse

TPTP内存配置文件(即,不在Eclipse中运行)。根据TPTP和代理控制器文档,这应该是可能的。

根据网站上的指示,我将TPTP组件(4.6.0)与代理控制器一起安装到了Eclipse(Galileo)工作台中。为了启用代理,我在启动Tomcat实例的命令行中添加了以下选项:

-agentlib:JPIBootLoader=JPIAgent:server=enabled;HeapProf:allocsites=true

并将以下目录添加到PATH的前面:

D:\dev\tools\ac\plugins\org.eclipse.tptp.javaprofiler

D:\dev\tools\ac\bin

尝试启动Tomcat时,我始终收到以下错误消息:

ERROR: JDWP unable to get necessary JVMTI capabilities. ["debugInit.c",L279]

我做了很多谷歌搜索,但没有发现任何相关信息。我尝试重新安装TPTP和代理控制器的各种版本。

最后,问题出在我用“ jpda”选项启动Tomcat,而catalina.bat将该选项转换为

-Xdebug -Xrunjdwp:transport=.....

除去“ jpda”命令参数会导致JVMTI开始工作。

因此,问题是:在任何搜索过程中我都没有发现任何指示JVMTI代理与调试不兼容的信息。有人可以解释发生了什么,为什么JVMTI + JDWP不是有效的设置?

回答:

到目前为止,没有一个答案是正确的,如果您查询提到的错误,这是Google上的第一个匹配项,因此,我认为需要进行一些澄清。

JVMTI和JDWP 可以 一起工作,实际上,它们通常必须一起使用。ERROR: JDWP unable to get necessary JVMTI

capabilities如果在命令行上多次-Xrunjdwp(和/或可能-agentlib:jdwp)指定了您,将会得到提示。要解决此问题,请确保命令行中只有-Xrunjdwp-agentlib:jdwp之一。

有关更多详细信息,请继续阅读…

JVMTI(Java虚拟机工具接口)是JVMDI(Java虚拟机调试接口)和JVMPI(Java虚拟机概要分析接口)的后继产品。它合并了JVMDI和JVMPI的功能,这两个功能在Java

5中已弃用,而在Java 6中已删除。这是API,它公开了JVM内部以进行调试和配置。

JDWP(Java调试线协议)是一种协议,它描述了一种用于传输命令和响应的简单机制。据我所知,这是坐在JVM外部的调试器与之通信并与JVMTI交互的唯一方法。

JDI(Java调试器接口)是一种客户端(调试器)API,它公开了JVMTI的某些功能,同时或多或少透明地使用了JDWP。

Bob

Dobbs的答案中提到的错误涉及误导性错误消息,以及JVM在每次在命令行上指定JDWP时都会尝试加载一次的事实。它没有声明JDWP和JVMTI不能一起使用。

此处提供更多信息:https

:

//www.ibm.com/support/knowledgecenter/ssw_ibm_i_74/rzaha/jpdebuga.htm

以上是 Java JVMTI不能与-Xdebug -Xrunjdwp一起使用 的全部内容, 来源链接: utcz.com/qa/400195.html

回到顶部