Java JVMTI与-Xdebug -Xrunjdwp不兼容

Jim*_*son 12 java debugging jdwp jvmti

我花了最后4个小时尝试在必须远程运行的Tomcat实例上设置Eclipse TPTP内存分析(即不在Eclipse中).根据TPTP和代理控制器文档,这应该是可能的.

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

-agentlib:JPIBootLoader=JPIAgent:server=enabled;HeapProf:allocsites=true
Run Code Online (Sandbox Code Playgroud)

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

D:\dev\tools\ac\plugins\org.eclipse.tptp.javaprofiler
D:\dev\tools\ac\bin
Run Code Online (Sandbox Code Playgroud)

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

ERROR: JDWP unable to get necessary JVMTI capabilities. ["debugInit.c",L279]
Run Code Online (Sandbox Code Playgroud)

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

最后问题结果是我用"jpda"选项启动Tomcat,catalina.bat转换为

-Xdebug -Xrunjdwp:transport=.....
Run Code Online (Sandbox Code Playgroud)

删除"jpda"命令参数导致JVMTI开始工作.

所以,问题是:我在任何搜索过程中都没有发现任何内容,表明JVMTI代理与调试不兼容.有人可以解释发生了什么以及为什么JVMTI + JDWP不是有效的设置?

Cod*_*ing 21

到目前为止,没有一个答案是正确的,如果您查询上述错误,这是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中删除.它是为了调试和分析而公开JVM内部的API.

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

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

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

更多信息:http://publib.boulder.ibm.com/infocenter/iseries/v5r4/topic/rzaha/jpdebuga.htm