eclipse
Eclipseリモートデバッグの仕組み
サーチ…
Eclipseリモートデバッグはscencesの後ろでどのように機能しますか
Eclipseのデバッグは、エージェントと呼ばれるものから始まります。
コンパイルされた.class
ソースを実行するJVMには、外部ライブラリ(JavaまたはC ++で書かれたもの)をJVMに注入する機能があります。これらの外部ライブラリはエージェントと呼ばれ、実行された.class
ファイルの内容を変更する機能を持っています。これらのエージェントは、JVM内で実行される通常のJavaコードからアクセスできないJVMの機能にアクセスできます。実行中のソースコードの注入や変更、プロファイリングなどの面白いものを実行するために使用できます.JRebelのようなツールは、機能のこの部分は、彼らの魔法を達成する。
Agent LibをJVMに渡すには、起動引数を使用して、
agentlib:libname[=options] format.
実際にTomcatを実行しているJVMにjdwp
というAgent Libを渡していました。 jdwp
は、デバッガと実行中のJVM間の通信を定義するために使用されるJDWP(Java Debug Wire Protocol)の JVM固有のオプション実装です。実装が存在する場合は、JVMのネイティブライブラリとしてjdwp.so
またはjdwp.dll
として提供されます
それではどうしますか?
簡単に言えば、jdwpエージェントは、基本的に、アプリケーションを実行するJVMインスタンスとデバッガ(リモートまたはローカルのいずれかに配置可能)との間のリンクとなる機能を提供します。これはエージェントライブラリであるため、実行中のコードをインターセプトし、JVMとデバッガ間にブリッジを作成し、デバッガの機能をJVMに適用することができます。 JVMアーキテクチャでは、デバッグ機能はJVM自体には存在しませんが、外部ツール(デバッガとも呼ばれます)に抽象化されているため、これらのツールはデバッグ対象のJVMを実行しているローカルマシンに存在するか、外部のマシンから。これは、リモートマシン上でJVMを動作させ、JDWPを使用してリモートデバッガで通信できるようにする、この非結合型のモジュラアーキテクチャです。
要するに、これはEclipseデバッガの動作方法です。