1
41
JVM的调试特性通过 Java Platform Debugger Architecture (JPDA) . JPDA本身由以下部分组成:
中列出的图表 JPDA architecture structure 是一个很好的起点。需要寻找的其他地方是 guides listed in the JPDA page . |
2
9
Java的调试架构称为JPDA。你可能想读JPDA documentation . 尤其是, Walk-through section 给出了一个与JDI接口以在堆栈上获取值的IDE示例。 |
3
9
Eclipse调试从所谓的代理开始。 运行已编译的“.class”源的JVM具有一个特性,允许在运行时将外部库(以Java或C++编写)注入JVM。这些外部库称为代理,它们能够修改已运行的.class文件的内容。这些代理可以访问JVM的功能,这些功能在JVM内部运行的常规Java代码中是不可访问的,它们可以用来做有趣的事情,比如注入和修改正在运行的源代码、剖析等。一些工具如JReCURL(用于热替换代码)利用这一功能来实现。他们的魔法。 要将代理lib传递给JVM,可以通过启动参数来实现,使用-
实际上,我们正在将名为jdwp的代理lib传递给运行Tomcat的JVM。JDWP是JDM特定的、可选的JDWP(Java调试线协议)实现,用于定义调试器和正在运行的JVM之间的通信。它的实现(如果存在)作为jvm的本机库作为jdwp.so或jdwp.dll提供。 那它是做什么的呢?简单来说,我们传递的jdwp代理基本上是作为运行应用程序的jvm实例和调试器(可以位于远程或本地)之间的链接的功能。因为它是一个代理库,所以它确实能够截获正在运行的代码,在JVM和调试器之间创建一个桥,并在JVM上应用调试器的功能。由于在JVM体系结构中,调试功能不在JVM内部,而是抽象为外部工具(适当地称为调试程序),因此这些工具可以驻留在运行正在调试的JVM的本地计算机上,也可以从AM外部计算机运行。正是这种非耦合、模块化的体系结构允许我们在远程机器上运行一个JVM,并使用JDWP,让远程调试器能够与之通信。 简而言之,这就是Eclipse调试器的工作原理。 |