." Copyright (c) 1995, 2011, Oracle and/or its affiliates. All rights reserved. ." .TH jdb 1 "05 Jul 2012" .LP .SH "名前" jdb \- Javaデバッガ .LP .LP \f3jdb\fPは、Java言語プログラムのバグを見つけて修正するために使用するツールです。 .LP .SH "形式" .LP .nf \f3 .fl \fP\f3jdb\fP [ options ] [ class ] [ arguments ] .fl .fi .LP .RS 3 .TP 3 options 次に示すコマンドライン・オプション .TP 3 class デバッグを開始するクラスの名前 .TP 3 arguments \f2class\fPの\f2main()\fPメソッドに渡す引数 .RE .LP .SH "説明" .LP .LP Javaデバッガ\f3jdb\fPは、Javaクラス用の簡単なコマンドライン・デバッガです。 .na \f2Java Platform Debugger Architecture\fP @ .fi http://docs.oracle.com/javase/7/docs/technotes/guides/jpda/index.htmlを視覚的に実行し、ローカルまたはリモートのJava Virtual Machineの検査とデバッグを行うことができます。 .LP .SS jdbセッションの開始 .LP .LP jdbセッションを開始するには様々な方法があります。最も頻繁に使用されるのは、デバッグするアプリケーションのメイン・クラスを使用して、\f3jdb\fPから新しいJava仮想マシン(VM)を起動する方法です。コマンドラインで、\f3java\fPのかわりに\f3jdb\fPコマンドを入力します。たとえば、アプリケーションのメイン・クラスがMyClassの場合は、JDB環境でデバッグするときに次のコマンドを使用します。 .LP .nf \f3 .fl % jdb MyClass .fl \fP .fi .LP .LP この方法で起動すると、\f3jdb\fPは、指定されたパラメータを使用して2つ目のJava VMを呼び出します。次に、指定されたクラスをロードして、クラスの最初の命令を実行する前にVMを停止させます。 .LP .LP \f3jdb\fPのもう1つの使用方法は、すでに実行中のJava VMにjdbを接続することです。jdbが接続するVMを、その実行中に起動するための構文を次に示します。これは、インプロセス・デバッグ用ライブラリをロードし、接続の種類を指定します。 .LP .nf \f3 .fl \-agentlib:jdwp=transport=dt_socket,server=y,suspend=n .fl \fP .fi .LP .LP たとえば、次のコマンドは、MyClassアプリケーションを実行して、\f3jdb\fPがあとでそのアプリケーションに接続できるようにします。 .LP .nf \f3 .fl % java \-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n MyClass .fl \fP .fi .LP .LP 次のコマンドを使用して、\f3jdb\fPをVMに接続できます。 .LP .nf \f3 .fl % jdb \-attach 8000 .fl \fP .fi .LP .LP この場合、\f3jdb\fPは新しいVMを起動するかわりに既存のVMに接続されるため、\f3jdb\fPコマンドラインには「MyClass」は指定しません。 .LP .LP デバッガをVMに接続するには他にも様々な方法があり、すべて\f3jdb\fPでサポートされています。接続オプションについては、Java Platform Debugger Architectureの .na \f2ドキュメント\fP @ .fi http://docs.oracle.com/javase/7/docs/technotes/guides/jpda/conninv.htmlを参照してください。\f3jdb\fPで使用するためにJ2SE 1.4.2以前のVMを起動する方法については、 .na \f21.4.2のドキュメント\fP @ .fi http://docs.oracle.com/javase/1.4.2/docs/guide/jpda/conninv.htmlを参照してください。 .LP .SS 基本jdbコマンド .LP .LP 基本的な\f3jdb\fPコマンドの一覧を示します。Javaデバッガがサポートするコマンドはこれ以外にもあり、それらは\f3jdb\fPの\f2help\fPコマンドを使用して表示できます。 .LP .RS 3 .TP 3 helpまたは? 最も重要な\f3jdb\fPコマンド\f2help\fPは、認識されたコマンドのリストに簡潔な説明を付けて表示します。 .TP 3 run \f3jdb\fPを起動して必要なブレークポイントを設定したあとに、このコマンドを使用して、デバッグするアプリケーションの実行を開始できます。このコマンドは、既存のVMに接続している場合とは異なり、デバッグするアプリケーションが\f3jdb\fPから起動したときにのみ使用できます。 .TP 3 cont ブレークポイント、例外、またはステップ実行の後で、デバッグするアプリケーションの実行を継続します。 .TP 3 print Javaオブジェクトおよびプリミティブ値を表示します。プリミティブ型の変数またはフィールドの場合には、実際の値が出力されます。オブジェクトの場合には、短い説明が出力されます。オブジェクトについては、以降の\f2dump\fPコマンドの説明を参照してください。 .br .br \f2注意: ローカル変数を表示するには、その変数を含むクラスが\fP\f2javac(1)\fP\f2 \fP\f2\-g\fPオプションでコンパイルされている必要があります。 .br .br \f2print\fPでは、メソッドの呼出しを含む多数の簡単なJava式がサポートされています。次に例を示します。 .RS 3 .TP 2 o \f2print MyClass.myStaticField\fP .TP 2 o \f2print myObj.myInstanceField\fP .TP 2 o \f2print i+j+k\fP \f2(i、j、およびkはプリミティブであり、フィールドまたはローカル変数のいずれか)\fP .TP 2 o \f2print myObj.myMethod()\fP \f2(myMethodがnull以外を返す場合)\fP .TP 2 o \f2print new java.lang.String("Hello").length()\fP .RE .TP 3 dump プリミティブ値の場合には、このコマンドは\f2print\fPと同じです。オブジェクトの場合には、オブジェクト内に定義されている各フィールドの現在の値が出力されます。staticフィールドとinstanceフィールドが出力されます。 .br .br \f2dump\fPコマンドでは、\f2print\fPコマンドと同じ式がサポートされます。 .TP 3 threads 現在実行中のスレッドを一覧表示します。スレッドごとに、名前と現在の状態、および他のコマンドに使用できるインデックスが出力されます。次に例を示します。 .nf \f3 .fl 4. (java.lang.Thread)0x1 main running .fl \fP .fi この例では、スレッド・インデックスは4であり、スレッドはjava.lang.Threadのインスタンスです。スレッドの名前は「main」であり、現在実行中です。 .TP 3 thread 現在のスレッドにするスレッドを選択します。多くの\f3jdb\fPコマンドは、現在のスレッドの設定に基づいて実行されます。スレッドは、\f2threads\fPコマンドで説明したスレッド・インデックスとともに指定します。 .TP 3 where 引数を指定しないで\f2where\fPを実行すると、現在のスレッドのスタックがダンプされます。\f2where all\fPコマンドは、現在のスレッド・グループにあるスレッドのスタックをすべてダンプします。\f2where\fP \f2threadindex\fPは、指定されたスレッドのスタックをダンプします。 .br .br 現在のスレッドが(ブレークポイントか\f2suspend\fPコマンドによって)中断している場合は、ローカル変数とフィールドは\f2print\fPコマンドと\f2dump\fPコマンドで表示できます。\f2up\fPコマンドと\f2down\fPコマンドで、どのスタック・フレームをカレントにするかを選ぶことができます。 .RE .LP .SS ブレークポイント .LP .LP ブレークポイントは、行番号またはメソッドの最初の命令で\f3jdb\fPに設定できます。次に例を示します。 .LP .RS 3 .TP 2 o \f2stop at MyClass:22\fP \f2(MyClassが含まれるソース・ファイルの22行目の最初の命令にブレークポイントを設定)\fP .TP 2 o \f2stop in java.lang.String.length\fP \f2(\fP\f2java.lang.String.length\fPメソッドの最初にブレークポイントを設定) .TP 2 o \f2stop in MyClass.\fP \f2(はMyClassコンストラクタを識別)\fP .TP 2 o \f2stop in MyClass.\fP \f2(はMyClassの静的初期化コードを識別)\fP .RE .LP .LP メソッドがオーバーロードされている場合には、メソッドの引数の型も指定して、ブレークポイントに対して適切なメソッドが選択されるようにする必要があります。たとえば、「\f2MyClass.myMethod(int,java.lang.String)\fP」または「\f2MyClass.myMethod()\fP」と指定します。 .LP .LP \f2clear\fPコマンドは、「\f2clear\ MyClass:45\fP」のような構文を使用してブレークポイントを削除します。\f2clear\fPを使用するか、引数を指定しないでコマンドを使用すると、現在設定されているすべてのブレークポイントが表示されます。\f2cont\fPコマンドは実行を継続します。 .LP .SS ステップ実行 .LP .LP \f2step\fPコマンドは、現在のスタック・フレームまたは呼び出されたメソッド内で、次の行を実行します。\f2next\fPコマンドは、現在のスタック・フレームの次の行を実行します。 .LP .SS 例外 .LP .LP スローしているスレッドの呼出しスタック上のどこにもcatch文がない場合に例外が発生すると、VMは通常、例外トレースを出力して終了します。ただし、\f3jdb\fP環境で実行している場合は、違反のスロー時に\f3jdb\fPに制御が戻ります。次に、\f3jdb\fPを使用して例外の原因を診断します。 .LP .LP たとえば、「\f2catch java.io.FileNotFoundException\fP」または「\f2catch mypackage.BigTroubleException\fP」のように\f2catch\fPコマンドを使用すると、デバッグされたアプリケーションは、他の例外がスローされたときに停止します。例外が特定のクラス(またはサブクラス)のインスタンスの場合は、アプリケーションは例外がスローされた場所で停止します。 .LP .LP \f2ignore\fPコマンドを使用すると、以前の\f2catch\fPコマンドの効果が無効になります。 .LP .LP \f2注意: \fP\f2ignore\fPコマンドでは、デバッグされるVMは例外を無視せず、デバッガのみが例外を無視します。 .LP .SH "コマンドライン・オプション" .LP .LP コマンドラインでJavaアプリケーション起動ツールのかわりに\f3jdb\fPを使用する場合、\f3jdb\fPは、\f2\-D\fP、\f2\-classpath\fP、\f2\-X