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.javaprofilerD:\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