Java的JVMTI不一起-Xdebug -Xrunjdwp工作
题
我花的最后4小时试图设置Eclipse TPTP存储器 仿形于必须远程运行(即不在一个Tomcat实例 日食)。这应该根据TPTP和代理可能 控制器文档。
我安装TPTP组分(4.6.0)到我的Eclipse(伽利略) 工作台,根据该代理控制器具有沿 该网站上的说明。要启用代理,我添加了 以下选项来启动该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和代理控制器的各种版本。
在结束时的问题被证明是,我是启动Tomcat 用 “JPDA” 选项,它catalina.bat中转换成
-Xdebug -Xrunjdwp:transport=.....
卸下“JPDA”命令的参数引起JVMTI开始工作。
所以,问题是:我什么也没发现任何在我的搜索, 指示JVMTI剂与调试不相容。能够 有人解释是怎么回事,为什么JVMTI + JDWP是不是有效 设置?
解决方案
的答案都不到目前为止是正确的,这是如果查询提到的错误在谷歌出现的第一个打击,所以我认为有必要澄清。
和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的内部用于调试和分析的目的。
的APIJDWP(爪哇调试线协议)是描述用于发送命令和响应的简单机制的协议。据我所知,它是调试坐在外面JVM与它沟通,并与JVMTI接口的唯一途径。
JDI(Java调试接口)是一个客户端(调试器侧)API暴露一些JVMTI的同时利用JDWP的更多或更少的透明的特性。
在在鲍勃多布斯的提到的错误答案涉及误导性的错误消息,而事实上,JVM将尽力为它是在命令行上指定每次加载一次JDWP。它并不在任何地方指出JDWP和JVMTI不能一起使用。
这里更多信息: https://www.ibm.com /support/knowledgecenter/ssw_ibm_i_74/rzaha/jpdebuga.htm
其他提示
我遇到同样的问题,因为你,但我想出了一个JVM错误报告(的 http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6354345 )以为蒙上对这个问题的一些情况。它基本上可以归结为永远不被打算两次加载到同一虚拟机Java代理库。很烂,但似乎喜欢它的代理系统的基本限制,你不能在同一时间两者都做。
对于我来说这是同样的问题,因为代码金光闪闪后,他们重复-Xrunjdwp
没有意识到有,因为它是隐藏在可变-Xrunjdwp
,请检查您的应用程序服务器的启动脚本第二%JAVA_OPTIONS%
。