繁体   English   中英

Eclipse如何在应用程序服务器中调试代码?

[英]How does Eclipse debug code in an application server?

当我在Eclipse中以调试模式运行服务器时,Eclipse和我的应用程序服务器(JBoss)之间正在进行什么通信? 这是如何运作的?

以调试模式启动服务器时,它将侦听指定的TCP端口。 Eclipse连接到该端口,并使用Java调试线协议(JDWP)进行通信。 请在此处阅读详细信息: http//java.sun.com/j2se/1.5.0/docs/guide/jpda/

我认为它叫做JDWP(Java Debugging Wire Protocol) - 在这里阅读更多内容

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

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

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

 agentlib:libname[=options] format.

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

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

这就是Eclipse调试器的工作原理。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM