Eclipse内からデバッグモードでサーバーを実行すると、Eclipseとアプリケーションサーバー(JBoss)の間でどのような通信が行われていますか?これはどのように作動しますか?
3 に答える
サーバーをデバッグモードで起動すると、サーバーは指定されたTCPポートでリッスンします。Eclipseはそのポートに接続し、Java Debug Wire Protocol(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 内で実行されている通常の Java コード内からはアクセスできない JVM の機能にアクセスでき、実行中のソース コードの挿入や変更、プロファイリングなどの興味深い作業に使用できます。JRebel などのツールは、彼らの魔法を実現するためのこの機能。
Agent Lib を JVM に渡すには、起動引数を介して、
agentlib:libname[=options] format.
実際には、jdwp という名前の Agent Lib を Tomcat を実行している JVM に渡していました。jdwp は、JDWP (Java Debug Wire Protocol) の JVM 固有のオプション実装であり、デバッガーと実行中の JVM 間の通信を定義するために使用されます。JVM のネイティブ ライブラリとして jdwp.so または jdwp.dll のいずれかとして提供されている場合は実装です。
それで、それは何をしますか?簡単に言えば、渡す jdwp エージェントは基本的に、アプリケーションを実行している JVM インスタンスとデバッガー (リモートまたはローカルのいずれかに配置可能) の間のリンクとして機能します。これはエージェント ライブラリであるため、実行中のコードを傍受し、JVM とデバッガーの間のブリッジを作成し、デバッガーの機能を JVM に適用することができます。JVM アーキテクチャでは、デバッグ機能は JVM 自体にはなく、外部ツール (デバッガーと呼ばれるのが適切です) に抽象化されているため、これらのツールは、デバッグ中の JVM を実行しているローカル マシンに常駐するか、実行することができます。外部マシンから。JVM をリモート マシン上で実行し、JDWP を使用できるようにするのは、この分離されたモジュラー アーキテクチャです。
つまり、Eclipse デバッガーがどのように機能するかということです。