Eclipse Remote Debugging 如何在场景后面工作

Eclipse 调试从所谓的代理开始。

运行已编译的 .class 源的 JVM 具有允许将外部库(用 Java 或 C++编写)注入 JVM 的功能,几乎就是运行时。这些外部库称为代理,它们能够修改已运行的 .class 文件的内容。这些代理可以访问 JVM 的功能,这些功能无法在 JVM 内部运行的常规 Java 代码中访问,它们可用于执行有趣的操作,如注入和修改正在运行的源代码,分析等工具,如 JRebel 使用这一功能实现了他们的魔力。

要将 Agent Lib 传递给 JVM,可以通过启动参数,使用

 agentlib:libname[=options] format.

我们实际上是将名为 jdwp 的 Agent Lib 传递给运行 Tomcat 的 JVM。jdwpJDWP(Java 调试线协议) 的 JVM 特定可选实现,用于定义调试器和正在运行的 JVM 之间的通信。它的实现,如果存在,作为 jdwp.sojdwp.dll 的 JVM 的本机库提供

那它是做什么用的?

简单来说,我们传递的 jdwp 代理基本上是服务于运行应用程序的 JVM 实例和调试器(可以位于远程或本地)之间的链接的功能。由于它是一个代理库,它确实能够拦截正在运行的代码,在 JVM 和调试器之间创建一个桥梁,并具有在 JVM 上应用调试器的功能。由于在 JVM 体系结构中,调试功能在 JVM 本身中找不到,而是被抽象为外部工具(可称为调试器),这些工具可以驻留在运行正在调试的 JVM 的本地机器上,也可以运行来自外部机器。正是这种去耦合的模块化架构允许我们在远程机器上运行 JVM 并使用 JDWP,
简而言之,这就是 Eclipse 调试器的工作原理。