Java JVMTI没有';t与-Xdebug-Xrunjdwp一起工作

Java JVMTI没有';t与-Xdebug-Xrunjdwp一起工作,java,debugging,jvmti,jdwp,Java,Debugging,Jvmti,Jdwp,我花了4个小时试图设置Eclipse TPTP内存 在必须远程运行的Tomcat实例上进行评测(即不在 月食)。根据TPTP和代理商,这应该是可能的 控制器文档 我在Eclipse(Galileo)中安装了TPTP组件(4.6.0) 工作台,以及根据 网站上的说明。为了启用代理,我添加了 启动Tomcat实例的命令行的以下选项: -agentlib:JPIBootLoader=JPIAgent:server=enabled;HeapProf:allocsites=true 并将以下目录添加到路

我花了4个小时试图设置Eclipse TPTP内存 在必须远程运行的Tomcat实例上进行评测(即不在 月食)。根据TPTP和代理商,这应该是可能的 控制器文档

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

-agentlib:JPIBootLoader=JPIAgent:server=enabled;HeapProf:allocsites=true
并将以下目录添加到路径的前面:

D:\dev\tools\ac\plugins\org.eclipse.tptp.javaprofiler
D:\dev\tools\ac\bin
在尝试启动Tomcat时,我始终出现以下错误 信息:

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

最后的问题是我开始使用Tomcat 使用“jpda”选项,catalina.bat将其转换为

-Xdebug -Xrunjdwp:transport=.....
删除“jpda”命令参数导致JVMTI开始工作

所以,问题是:我在任何一次搜索中都没有发现任何东西 指示JVMTI代理与调试不兼容。可以 有人解释发生了什么以及为什么JVMTI+JDWP不是有效的
安装?

我遇到了与您相同的问题,但我提出了一个JVM错误报告(),对这个问题有了一些了解。基本上可以归结为Java代理库从未打算两次加载到同一个VM中。糟糕透了,但这似乎是代理系统的基本限制,你不能同时做这两件事。

到目前为止,没有一个答案是正确的,如果你对上面提到的错误提出质疑,这是谷歌上出现的第一个问题,所以我觉得需要澄清一下

JVMTI和JDWP确实一起工作,事实上它们通常必须一起使用。如果在命令行上多次指定了
-Xrunjdwp
(和/或可能的
-agentlib:JDWP
),您将得到
错误:JDWP无法获得必要的JVMTI功能。要修复它,请确保命令行中只有
-Xrunjdwp
-agentlib:jdwp
之一

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

JVMTI(Java虚拟机工具接口)是JVMDI(Java虚拟机调试接口)和JVMPI(Java虚拟机评测接口)的继承者。它合并了JVMDI和JVMPI的功能,这两种功能在Java5中都被弃用,在Java6中被删除。API公开了JVM的内部,用于调试和分析

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

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

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


这里有更多信息:

对我来说,这与代码Bling post是同一个问题,它们是重复的-Xrunjdwp没有意识到还有第二个-Xrunjdwp,因为它隐藏在变量%JAVA\u OPTIONS%中,请检查您的应用程序服务器启动脚本。

,可以同时使用远程调试和评测吗?@michael我相信可以,但除非你试图模拟一些奇怪的情况,试图重现内存泄漏或巨大的CPU峰值,否则在调试时评测听起来不是个坏主意吗?答案很好。正在获取此错误。我必须在我的旧Sun应用服务器上禁用调试模式,然后才能使用YourKit profiler配置。谢谢大家!@实际上,答案是“视情况而定”。这取决于评测代理从jvmti请求的功能。例如,断点功能一次只能由一个环境拥有(每个代理都有自己的环境)。因此,如果探查器代理需要设置断点的功能,那么调试器代理将无法获得这些断点(或者反过来)。这意味着,每当您遇到这样的错误时,您将无能为力,在这种情况下,您将无法进行调试。
-Xdebug -Xrunjdwp:transport=.....