jdb [ options ] [ class ] [ arguments ]
options
class
arguments
class
の main()
メソッドに渡す引数。Java デバッガ jdb は、Java クラス用の簡単なコマンド行デバッガです。Java Platform Debugger Architecture のデモアプリケーションであり、ローカルまたはリモートの Java Virtual Machine の検査とデバッグを行うことができます。
jdb セッションを開始するにはさまざまな方法があります。もっとも頻繁に使われるのは、デバッグするアプリケーションのメインクラスを使用して、jdb から新しい Java 仮想マシン (VM) を起動する方法です。コマンド行で、java の代わりに jdb コマンドを入力します。たとえば、アプリケーションのメインクラスが MyClass の場合は、JDB 環境でデバッグするときに次のコマンドを使用します。
C:\> jdb MyClass
この方法で起動すると、jdb は、指定されたパラメータを使って 2 つ目の Java VM を呼び出します。次に、指定されたクラスをロードして、クラスの最初の命令を実行する前に VM を停止させます。
jdb のもう 1 つの使用方法は、すでに起動している Java VM に jdb を接続することです。jdb を使用してデバッグする VM は、次のオプションを使用して起動しなければなりません。これらのオプションは、インプロセスデバッグ用ライブラリをロードし、接続の種類を指定します。
-agentlib:jdwp=transport=dt_shmem,server=y,suspend=n
たとえば、次のコマンドは、MyClass アプリケーションを実行して、jdb があとでそのアプリケーションに接続できるようにします。
C:\> java -agentlib:jdwp=transport=dt_shmem,address=jdbconn,server=y,suspend=n MyClass次のコマンドを使用して、jdb を VM に接続できます。
C:\> jdb -attach jdbconnこの場合、jdb は新しい VM を起動する代わりに既存の VM に接続されるため、jdb コマンド行には「MyClass」は指定しません。
デバッガを VM に接続するにはほかにもさまざまな方法があり、すべて jdb でサポートされています。接続オプションについては、Java Platform Debugger Architecture のドキュメントを参照してください。jdb で使用するために J2SE 1.4.2 以前の VM を起動する方法については、1.4.2 のドキュメントを参照してください。
注:局所変数を表示するには、その変数を含むクラスが javac -g オプションでコンパイルされていなければなりません。
print では、メソッドの呼び出しを含む多数の簡単な Java 式がサポートされています。次に例を示します。
dump コマンドでは、print コマンドと同じ式がサポートされます。
4. (java.lang.Thread)0x1 main runningこの例では、スレッドインデックスは 4 であり、スレッドは java.lang.Thread のインスタンスです。スレッドの名前は「main」であり、現在実行中です。
where
を実行すると、現在のスレッドのスタックがダンプされます。where all
コマンドは、現在のスレッドグループにあるスレッドのスタックを、すべてダンプします。where
threadindex は、指定されたスレッドのスタックをダンプします。
現在のスレッドが (ブレークポイントか suspend コマンドによって) 中断している場合は、局所変数とフィールドは print コマンドと dump コマンドで表示できます。up コマンドと down コマンドで、どのスタックフレームをカレントにするかを選ぶことができます。
ブレークポイントは、行番号またはメソッドの最初の命令で jdb に設定できます。次に例を示します。
メソッドがオーバーロードされている場合には、メソッドの引数の型も指定して、ブレークポイントに対して適切なメソッドが選択されるようにしなければなりません。たとえば、「MyClass.myMethod(int,java.lang.String)」または「MyClass.myMethod()」と指定します。
clear コマンドは、「clear MyClass:45」のような構文を使用してブレークポイントを削除します。clear を使用するか、引数を指定しないでコマンドを使用すると、現在設定されているすべてのブレークポイントが表示されます。cont コマンドは実行を継続します。
step コマンドは、現在のスタックフレームまたは呼び出されたメソッド内で、次の行を実行します。next コマンドは、現在のスタックフレームの次の行を実行します。
スローしているスレッドの呼び出しスタック上のどこにも catch 文がない場合に例外が発生すると、VM は通常、例外トレースを出力して終了します。ただし、jdb 環境で実行している場合は、例外が発生すると jdb に制御が戻ります。次に、jdb を使用して例外の原因を診断します。
たとえば、「catch java.io.FileNotFoundException」または「catch mypackage.BigTroubleException」のように catch コマンドを使用すると、デバッグされたアプリケーションは、ほかの例外がスローされたときに停止します。例外が特定のクラス (またはサブクラス) のインスタンスの場合は、アプリケーションは例外がスローされた場所で停止します。
ignore コマンドを使うと、以前の catch コマンドの効果が無効になります。
注:ignore コマンドでは、デバッグされる VM は例外を無視せず、デバッガだけが例外を無視します。
コマンド行で Java アプリケーション起動ツールの代わりに jdb を使用する場合、jdb は、-D、-classpath、-X<option> など、java コマンドと同じ数のオプションを受け入れます。
jdb は、そのほかに次のオプションを受け入れます。
デバッガとデバッグを行う VM を接続するための代替メカニズムに対して、その他のオプションがサポートされています。その他の接続オプションについては、Java Platform Debugger Architecture のドキュメントを参照してください。