2017-10-18 77 views
-3

我在JPDA中使用JDI api。但由于它的某些限制,我在某些时候被卡住了。 JDI有什么替代方案,以便我可以为Java程序编写自定义调试器?最好是Java替代品。什么是Java调试接口的替代方案

+1

为什么您需要替代方案? “由于某些限制”意味着什么?是什么让你觉得*有其他选择?为什么Sun和Oracle会两次做同样的工作? – EJP

+0

@EJP Oracle表示,调试器实现者可以编写代码与JPDA的JDWP层直接交互。所以它可能有一些替代品可以提供更多的功能。 – rainyday

+0

而@EJP我想要继续关注JDI不支持的局部变量的修改和访问。 – rainyday

回答

1

JDI在JVMTI本机API之上实现。所以,如果你愿意去实现你自己的调试代理代码,你可以避免使用JDI层。

但是,我怀疑它会让你更进一步。我怀疑JDI中的限制实际上是JVMTI本地API本身的限制。 (但是,您可以查看JVMTI specification以查看它是否支持您所需的功能。)

是否有替代JVMTI的选项?

AFAIK,no。至少,不是针对最近的Oracle Hotspot版本! (JDPA规范承认,并非所有的Java实现都将实现规范,所以其他厂商的Java实现可能存在不同的调试方式,但核心JRE和JVMTI之间的集成代表了很多软件因此Oracle(或任何其他人)不太可能为Hotspot实施JVMTI替代方案。)