コマンドラインデバッガーを使用してeclipseによって開始されたjavaプロセスに接続したいのですが、eclipseによって起動されたjavaプロセスのデフォルトのプロパティが何であるかわかりませんか?ソケットを使用した接続を使用してもかまいませんが、どれだけ遅くなるかわかりませんか?
2 に答える
どうですか
-Xdebug -Xnoagent -agentlib:jdwp=transport=dt_socket,suspend=n,address=localhost:12345
次に、Javaデバッガーをポート12345に接続できます
EclipseでのJavaアプリケーションの起動の「実行」と「デバッグ」の違いを調査しました。SysinternalsのProcessExplorerを使用して、いずれかのオプションを使用してJavaアプリケーションを起動するときにEclipseがフォークするJavaプロセスのコマンドラインを確認しました。(私はWindows 7システムを使用しています)
「RunHelloWorld」で
"C:\Program Files (x86)\Java\jdk1.7.0_07\jre\bin\javaw.exe" -Dfile.encoding=Cp1252 -classpath C:\workspace-juno\HelloWorld\bin com.example.HelloWorld
.....。
「DebugHelloWorld」で
"C:\Program Files (x86)\Java\jdk1.7.0_07\jre\bin\javaw.exe" -agentlib:jdwp=transport=dt_socket,suspend=y,address=localhost:2404 -Dfile.encoding=Cp1252 -classpath C:\workspace-juno\HelloWorld\bin com.example.HelloWorld
(アドレスポートは、後続の呼び出しで変更されました。たとえばaddress=localhost:2564
、次の呼び出しで変更されました。)
したがって、java(またはjavaw)は、実際には、「実行」または「デバッグ」のどちらが使用されたかに応じて、さまざまなオプションで開始されます。追加のagentlib:jdwp=transport=dt_socket,suspend=y,address=localhost:NNNN
オプションを追加します。これは、JVMをデバッグ可能モードにする標準的な方法です。HelloWorldプログラムは、続行する前に、まずデバッガーが正常に接続するのを待ちます(オプションsuspend=y
)。address=localhost:NNNN
HelloWorld JVMは、アドレスlocalhost:NNNN(...オプションおよび暗黙のデフォルトオプション)で実行されているデバッガーに自動的に接続しますserver=n
。(... Oracleは、起動オプションに関する信頼できる情報を提供agentlib
します)
Eclipse自体は、ポートNNNNを提供するデバッガーアプリケーションとして機能します。HelloWorld JVMは、番号NNNN + 1の独自のポートを介してこのポートに接続します(プロセスの[TCP / IP]タブで、Process Explorerでプロセスの使用済みポートを確認できます)。