." Copyright (c) 1995, 2010, Oracle and/or its affiliates. All rights reserved. ." .TH jdb 1 "06 Apr 2010" ." Generated from HTML by html2man (author: Eric Armstrong) .LP .SH "名前" jdb \- Java デバッガ .LP .RS 3 .LP .LP \f3jdb\fP は、Java 言語プログラムのバグを見つけて修正するために使用するツールです。 .LP .RE .SH "形式" .LP .LP .nf \f3 .fl \fP\f3jdb\fP [ options ] [ class ] [ arguments ] .fl .fi .LP .RS 3 .LP .RS 3 .TP 3 options 次に示すコマンド行オプション .TP 3 class デバッグを開始するクラスの名前 .TP 3 arguments \f2class\fP の \f2main()\fP メソッドに渡す引数 .RE .LP .RE .SH " 説明" .LP .LP .LP Java デバッガ \f3jdb\fP は、Java クラス用の簡単なコマンド行デバッガです。 .na \f2Java Platform Debugger Architecture\fP @ .fi http://java.sun.com/javase/6/docs/technotes/guides/jpda/index.html を視覚的に実行し、ローカルまたはリモートの Java Virtual Machine の検査とデバッグを行うことができます。 .LP .SS jdb セッションの開始 .LP .RS 3 .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://java.sun.com/javase/6/docs/technotes/guides/jpda/conninv.htmlを参照してください。\f3jdb\fP で使用するために J2SE 1.4.2 以前の VM を起動する方法については、 .na \f21.4.2 のドキュメント\fP @ .fi http://java.sun.com/j2se/1.4.2/docs/guide/jpda/conninv.htmlを参照してください。 .LP .SS 基本 jdb コマンド .LP .LP 基本的な \f3jdb\fP コマンドの一覧を示します。Java デバッガがサポートするコマンドはこれ以外にもあり、それらは \f3jdb\fP の \f2help\fP コマンドを使用して表示できます。 .LP .RS 3 .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 コマンドの説明を参照してください。 .LP \f2注:局所変数を表示するには、その変数を含むクラスが \fP\f2javac(1)\fP\f2 \fP\f2\-g\fP オプションでコンパイルされていなければなりません。 .LP \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 (i、j、および k はプリミティブであり、フィールドまたは局所変数のいずれか) .TP 2 o \f2print myObj.myMethod()\fP (myMethod が null 以外を返す場合) .TP 2 o \f2print new java.lang.String("Hello").length()\fP .RE .TP 3 dump プリミティブ値の場合には、このコマンドは \f2print\fP と同じです。オブジェクトの場合には、オブジェクト内に定義されている各フィールドの現在の値が出力されます。static フィールドと instance フィールドが出力されます。 .LP \f2dump\fP コマンドでは、\f2print\fP コマンドと同じ式がサポートされます。 .TP 3 threads 現在実行中のスレッドを一覧表示します。スレッドごとに、名前と現在の状態、およびほかのコマンドに使用できるインデックスが出力されます。 次に例を示します。 .RS 3 .LP .nf \f3 .fl 4. (java.lang.Thread)0x1 main running .fl \fP .fi .RE この例では、スレッドインデックスは 4 であり、スレッドは java.lang.Thread のインスタンスです。 スレッドの名前は「main」であり、現在実行中です。 .TP 3 thread 現在のスレッドにするスレッドを選択します。多くの \f3jdb\fP コマンドは、現在のスレッドの設定に基づいて実行されます。スレッドは、\f2threads\fP コマンドで説明したスレッドインデックスとともに指定します。 .TP 3 where 引数を指定しないで \f2where\fP を実行すると、現在のスレッドのスタックがダンプされます。 \f2where all\fP コマンドは、現在のスレッドグループにあるスレッドのスタックを、すべてダンプします。 \f2where\fP \f2threadindex\fP は、指定されたスレッドのスタックをダンプします。 .LP 現在のスレッドが (ブレークポイントか \f2suspend\fP コマンドによって) 中断している場合は、局所変数とフィールドは \f2print\fP コマンドと \f2dump\fP コマンドで表示できます。\f2up\fP コマンドと \f2down\fP コマンドで、どのスタックフレームをカレントにするかを選ぶことができます。 .RE .LP .RE .SS ブレークポイント .LP .RS 3 .LP .LP ブレークポイントは、行番号またはメソッドの最初の命令で \f3jdb\fP に設定できます。 次に例を示します。 .LP .RS 3 .TP 2 o \f2stop at MyClass:22\fP (MyClass が含まれるソースファイルの 22 行目の最初の命令にブレークポイントを設定) .TP 2 o \f2stop in java.lang.String.length\fP (\f2java.lang.String.length\fP メソッドの最初にブレークポイントを設定) .TP 2 o \f2stop in MyClass.\fP ( は MyClass コンストラクタを識別) .TP 2 o \f2stop in MyClass.\fP ( は MyClass の静的初期化コードを識別) .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 .RE .SS ステップ実行 .LP .RS 3 .LP .LP \f2step\fP コマンドは、現在のスタックフレームまたは呼び出されたメソッド内で、次の行を実行します。\f2next\fP コマンドは、現在のスタックフレームの次の行を実行します。 .LP .RE .SS 例外 .LP .RS 3 .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 .RE .RE .SH "コマンド行オプション" .LP .LP .LP コマンド行で Java アプリケーション起動ツールの代わりに \f3jdb\fP を使用する場合、\f3jdb\fP は、\f2\-D\fP、\f2\-classpath\fP、\f2\-X