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
归档时间: |
|
查看次数: |
12517 次 |
最近记录: |