- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我花了最后 4 个小时尝试设置 Eclipse TPTP 内存在必须远程运行的 Tomcat 实例上进行分析(即不在 eclipse )。根据 TPTP 和代理,这应该是可能的 Controller 文档。
我将 TPTP 组件 (4.6.0) 安装到我的 Eclipse (Galileo) 中工作台,以及根据代理 Controller 网站上的说明。为了启用代理,我添加了启动 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 和各种版本的代理 Controller 。
最后发现是我启动Tomcat的问题使用“jpda”选项,catalina.bat 将其转换为
-Xdebug -Xrunjdwp:transport=.....
删除“jpda”命令参数导致 JVMTI 开始工作。
所以,问题是:我在任何搜索过程中都没有找到指示 JVMTI 代理与调试不兼容。能有人解释发生了什么以及为什么 JVMTI + JDWP 无效设置?
最佳答案
到目前为止,没有一个答案是正确的,如果您查询提到的错误,这是 Google 上出现的第一个结果,所以我觉得需要一些澄清。
JVMTI 和 JDWP 确实一起工作,实际上它们通常必须一起使用。如果 -Xrunjdwp
(和/或可能 -agentlib:jdwp
)指定的次数超过一次在命令行上。要修复它,请确保您的命令行中只有 -Xrunjdwp
或 -agentlib:jdwp
之一。
有关更多详细信息,请继续阅读...
JVMTI(Java 虚拟机工具接口(interface))是 JVMDI(Java 虚拟机调试接口(interface))和 JVMPI(Java 虚拟机分析接口(interface))的继承者。它结合了 JVMDI 和 JVMPI 的功能,这两者在 Java 5 中已弃用并在 Java 6 中被删除。它是公开 JVM 内部结构以进行调试和分析的 API。
JDWP(Java Debug Wire Protocol)是一种描述传输命令和响应的简单机制的协议(protocol)。据我所知,这是位于 JVM 外部的调试器与其通信并与 JVMTI 交互的唯一方法。
JDI(Java 调试器接口(interface))是一种客户端(调试器端)API,它公开了 JVMTI 的一些功能,同时或多或少地透明地使用了 JDWP。
bug Bob Dobbs 的回答中提到了有关误导性错误消息的问题,以及 JVM 每次在命令行上指定时都会尝试加载一次 JDWP 的事实。它没有在任何地方声明 JDWP 和 JVMTI 不能一起使用。
更多信息在这里:https://www.ibm.com/support/knowledgecenter/ssw_ibm_i_74/rzaha/jpdebuga.htm
关于Java JVMTI 不能与 -Xdebug -Xrunjdwp 一起工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1562979/
我想调试使用我编写的 jvmti 代理的 java 应用程序。这似乎仅在 jvmti 代理未尝试启用“can_generate_breakpoint_events”功能时才有效。 尝试启用断点功能并在
我正在使用 JVMTI 库编写一个 Java 原生代理,并尝试获得访问局部变量的能力。在 OnLoad 阶段加载代理时,可以启用该功能,但是在实时阶段(OnAttach)加载它时似乎不可能,当我尝试添
我正致力于将橡皮擦数据争用检测算法作为 JVMTI 代理来实现。当我尝试运行一些示例输入来测试我的代码时,JVM 崩溃,转储如下所示(也可能显示相同错误的其他堆栈跟踪): native 方法中的 fa
感谢 JVMTI 代理,我正在记录我的 Java 应用程序中的所有方法条目。现在,我能够获取每个方法的名称,但我希望能够获取该方法接收到的参数值。 此问题已在较早的主题中讨论过(参见 How to g
我有两个问题 redefineClasses 可以与支持 JIT 的 JVM 一起使用吗? 如果是这样,在多线程应用程序中,如果一个线程使用 redefineClasses 重新定义一个类,另一个线程
我想知道是否可以使用 JVMTI 动态检测 Java 中的死锁。有两个事件指示使用同步语句在监视器上执行的操作: 监控竞争输入 Sent when a thread is attempting to
我正在使用 JVM 工具界面。我正在尝试使用 SetSystemProperty() 调用在 Agent_OnLoad 事件中创建 SystemProperty。如果该属性存在,它会正确设置一个新值。
我注册了一个JVMTI Event MethodEntry,它的回调函数是tdMethodEntry 如果有很多MethodEntry 事件,我的问题是 these event will be pro
我试图通读整个 jvmti 文档,但没有找到解决问题的方法。 我想获取在命令行中用于调用程序的类/文件的名称: java -agentpath: 在大写的情况下,我想获取 的名称。 GetSour
使用 MethodEntry和 MethodExit JVMTI 提供的事件 Hook 如何测量在 Java 中执行的方法的时间? 简单来说就是:time2 - time1但我看到的问题是,如何区分不
如何获取JVM TI _jclass的名称?我想显示 JVMTI 代理中加载的类的名称,但是我不清楚如何从 _jclass 实例获取类的名称。 最佳答案 这是你想要的吗? #include #i
我打算使用 Oracle 提供的 JVMTI API 开发一个分析器。对于可视化,我想在代理代码之上实现一个 GUI(Qt 框架)。我的第一个 jvmti agent 已经编译运行,我开始将它集成到我
出于各种目的,我在运行时检测类文件。为此,我正在使用 JVMTI 代理。我检测方法的策略是调用 RetransformClasses 函数来调用 ClassFileLoadHook。此策略适用于所有在
我正在使用附加 API 在运行时加载 JVMTI 代理。我想在我的程序完成时卸载 JVMTI 代理,而不终止加载代理的 JVM。根据 this documentation无法通过附加 API 执行此操
是否有可能获得完整的命令行以及用于启动当前 Java 进程并在 JVMTI 的 OnLoad 阶段获得的所有参数? 最佳答案 我咨询过JVMTI reference而且我认为它不是 native 提供
我部署了一个简单的 JVMTI 代理来测试字节码检测。我的策略是在 CompiledMethodLoad 回调中调用 RetransformClasses 函数来调用 ClassFileLoadHoo
编写分析我也会实现堆分析的典型任务。具体我想跟踪一下,哪个线程分配了多少数据?使用 JVMTI,我认为 Hook 到事件 VM Object Allocation 和 Object Free 就足够了
我正在使用 JVMTI 为 Java 应用程序编写一个检测工具。我已经看到 JVMTI 检测何时抛出异常以及何时根据 http://docs.oracle.com/javase/7/docs/plat
我们最近将一个网络应用程序(tomcat 5.5.x 网络应用程序)投入生产,它今天开始表现出奇怪的行为。我们在任何开发或预生产环境中都没有看到这种行为。 我们在运行时对生产系统的唯一看法是日志记录。
有没有我可以在 JVMTI 之上使用的不错的 Java API? 最佳答案 JVMTI 不是为在顶部安装 Java API 而构建的。 JVM TI 定义本身说: The JVM tool inter
我是一名优秀的程序员,十分优秀!