このセクションでは、Javaリモートデバッグを試して、簡単なものを記録してください。たとえそれが記録であっても!
シンプルなプログラムを作成してジャーに入力し、リモートサーバーにスローして実行し、リモートサーバーが実行されていることをシミュレートします。 Java Calling Shell Script Submission Jobプログラムを例に取ります。ソースコードは次のとおりです(次のプログラムは単純な例コードであり、コードの仕様を気にしないでください):
Import java.io.inputStream; public class javashell {public static void main(string [] args)throws exception {try {string grant = "chmod u+x submit-job.sh"; Runtime Runtime = runtime.getRuntime(); Process grantproc = runtime.exec(grant); int resultCode = grantProc.waitfor(); System.out.println(resultCode); grantProc = runtime.exec( "./ submit-job.sh"); resultCode = grantProc.waitfor(); System.out.println(resultCode); inputstream in = grantProc.getInputStream(); byte [] buffer = new byte [1024]; intコード; while((code = in.read(buffer、0、buffer.length))!= -1){system.out.print(new String(buffer、0、code)); } / ** *デッドループは、デバッガーが接続する前に終了するのを防ぎます(サスペンドパラメーター関数をテスト) * / system.out.println( "シェルスクリプトが実行され、時限印刷タスクが開始されます!"); int i = 0; while(true){thread.sleep(2000); system.out.println( "これは" th " +(++ i) +" second loop! ")リモートサーバーにコミットした後、実行してください。
コードを次のようにコピーします:java -xdebug -xnoagent -djava.compiler = none -xrunjdwp:transport = dt_socket、address = 9999、server = y、suspend = y -jar javashell.jar
プログラムはブロックされ、デバッガーが接続するのを待ちます。現時点では、リモートデバッグにEclipseを使用できます。
デバッガーをクリックして接続してソースコードを追跡して実行します。
リモートプログラムがデバッガーの実行を追跡していることを証明する出力がリモートにあります。
この時点で、デバッグプロセスを完了します。次に、パラメーターがsuspend = nである場合を試してください:
コードを次のようにコピーします:java -xdebug -xnoagent -djava.compiler = none -xrunjdwp:Transport = dt_socket、address = 9999、server = y、suspend = n -jar javashell.jar
現時点では、リモートプログラムはデバッガーデバッガー接続をブロックして待機せず、プログラムは正常に実行されます。
現時点では、リモートデバッグのためにEclipseのリモートデバッガーを使用できますが、実行されていないリモートコードまたは実行されているコードでのみローカルブレークポイントがヒットできることに注意する必要があります。たとえば、デッドループのポイントを破ることができます(デッドループは常に実行されているコードです):
次に、デバッガーを開始します:
ブレークポイントにとどまります。次に、ブレークポイントの位置に従って、デバッグ作業を続けます。この時点で、サスペンドパラメーターの役割を知っておく必要があります。
JVMデバッグパラメーターには、「suspend」というパラメーターがあり、「y」または「n」という2つの値があります。
最初にデバッグする場合は、パラメーターを「= Y」に設定して、EclipseがJavaアプリケーションにリモートで接続するようにします。
プロジェクトを最初に実行してからEclipseを接続する場合は、パラメーターを「suspend = n」に設定して、Javaアプリケーションが正常に実行され、Eclipseがリモート接続を開始するようにすることができます。
その他のパラメーターの詳細:
-XDEBUGデバッグを有効にします。
-xnoagentデフォルトのsun.tools.debugデバッガーを無効にします。
-djava.compiler = none jitコンパイラのロードを禁止します。
-XRUNJDWPロードJPDA参照実行のJDWPの例。
トランスポートは、VMSが使用するデバッガーとプロセス間の通信に使用されます。
DT_Socket Socket Transfer。
DT_SHMEMは、Windowsのみを共有するメモリ転送を共有しました。
サーバー= y/n VMをデバッグサーバーとして実行する必要があるかどうか。
アドレス= 3999デバッグサーバーのポート番号、クライアントがサーバーに接続するために使用するポート番号。
Debugクライアントが接続を確立した後にVMを起動するかどうかはsuspend = y/n。
Eclipseデバッグショートカットキー:
F5ステップイン
F6ステップオーバー
F7ステップアウト
F8は次のブレークポイントに進みます
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。