【发布时间】:2016-06-05 14:29:13
【问题描述】:
我想调试使用我编写的 jvmti 代理的 Java 应用程序。这似乎仅在 jvmti 代理未尝试启用“can_generate_breakpoint_events”功能时才有效。
尝试启用断点功能并在调试模式下启动应用程序会导致以下错误:
ERROR: JVMTI: 98(Unknown): Unable to get necessary JVMTI capabilities. [..\src\agent.cpp:437]
有什么方法可以调试使用 jvmti 代理并设置断点的应用程序?
我检查了Java JVMTI doesn't work alongside -Xdebug -Xrunjdwp,但接受的答案似乎并不正确,因为它似乎也确实取决于启用的功能。
我知道分析器(例如 YourKit 等)也在使用 jvmti 代理,并且仍然允许您在调试模式下运行您的应用程序(好吧,也许他们只是没有使用导致这些冲突的功能)。
【问题讨论】:
-
您未能获得哪种 JVMTI 功能? agent.cpp:437 是什么?
-
设置断点的能力(can_generate_breakpoint_events 如上所述)。 agent.cpp 是我自己的代理,需要这些功能。我想我明白问题所在,请参阅下面的答案。一个
标签: java debugging profiling jvmti yourkit