jdb.1 revision 1178
4169N/A." Copyright 2002-2006 Sun Microsystems, Inc. All Rights Reserved.
1178N/A." DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
1178N/A."
1178N/A." This code is free software; you can redistribute it and/or modify it
1178N/A." under the terms of the GNU General Public License version 2 only, as
1178N/A." published by the Free Software Foundation.
1178N/A."
1178N/A." This code is distributed in the hope that it will be useful, but WITHOUT
1178N/A." ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
1178N/A." FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
1178N/A." version 2 for more details (a copy is included in the LICENSE file that
1178N/A." accompanied this code).
1178N/A."
1178N/A." You should have received a copy of the GNU General Public License version
1178N/A." 2 along with this work; if not, write to the Free Software Foundation,
1178N/A." Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
1178N/A."
2362N/A." Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
2362N/A." CA 95054 USA or visit www.sun.com if you need additional information or
2362N/A." have any questions.
1178N/A."
5176N/A.TH jdb 1 "04 May 2009"
1178N/A." Generated from HTML by html2man (author: Eric Armstrong)
1178N/A
4033N/A.LP
4935N/A.SH "名前"
1178N/Ajdb \- Java デバッガ
1178N/A.LP
4935N/A.RS 3
1178N/A
4033N/A.LP
1178N/A.LP
1178N/A\f3jdb\fP は、Java 言語プログラムのバグを見つけて修正するために使用するツールです。
1178N/A.LP
1178N/A.RE
4169N/A.SH "形式"
1178N/A.LP
1178N/A
1178N/A.LP
1178N/A.nf
1178N/A\f3
4033N/A.fl
0N/A\fP\f3jdb\fP [ options ] [ class ] [ arguments ]
0N/A.fl
4935N/A.fi
4169N/A
4169N/A.LP
4169N/A.RS 3
4169N/A
4935N/A.LP
4169N/A.RS 3
4169N/A.TP 3
4935N/Aoptions
4169N/A次に示すコマンド行オプション
4169N/A.TP 3
4169N/Aclass
4169N/Aデバッグを開始するクラスの名前
4169N/A.TP 3
1178N/Aarguments
0N/A\f2class\fP の \f2main()\fP メソッドに渡す引数
0N/A.RE
1178N/A
0N/A.LP
1178N/A.RE
0N/A.SH " 説明"
1178N/A.LP
0N/A
1178N/A.LP
0N/A.LP
1178N/AJava デバッガ \f3jdb\fP は、Java クラス用の簡単なコマンド行デバッガです。
1178N/A.na
1178N/A\f2Java Platform Debugger Architecture\fP @
1178N/A.fi
1178N/Ahttp://java.sun.com/javase/6/docs/technotes/guides/jpda/index.html を視覚的に実行し、ローカルまたはリモートの Java Virtual Machine の検査とデバッグを行うことができます。
0N/A.LP
1178N/A.SS
1178N/Ajdb セッションの開始
1178N/A.LP
1178N/A.RS 3
1178N/A
1178N/A.LP
1178N/A.LP
1178N/Ajdb セッションを開始するにはさまざまな方法があります。もっとも頻繁に使われるのは、デバッグするアプリケーションのメインクラスを使用して、\f3jdb\fP から新しい Java 仮想マシン (VM) を起動する方法です。コマンド行で、 \f3java\fP の代わりに \f3jdb\fP コマンドを入力します。たとえば、アプリケーションのメインクラスが MyClass の場合は、JDB 環境でデバッグするときに次のコマンドを使用します。
1178N/A.LP
1178N/A.nf
1178N/A\f3
0N/A.fl
1178N/A % jdb MyClass
1178N/A.fl
1178N/A\fP
1178N/A.fi
1178N/A
1178N/A.LP
1178N/A.LP
1178N/Aこの方法で起動すると、\f3jdb\fP は、指定されたパラメータを使って 2 つ目の Java VM を呼び出します。 次に、指定されたクラスをロードして、クラスの最初の命令を実行する前に VM を停止させます。
1178N/A.LP
0N/A.LP
1178N/A\f3jdb\fP のもう 1 つの使用方法は、すでに起動している Java VM に jdb を接続することです。jdb が接続する VM を、その実行中に起動するための構文を次に示します。これは、インプロセスデバッグ用ライブラリをロードし、接続の種類を指定します。
1178N/A.LP
0N/A.nf
1178N/A\f3
0N/A.fl
1178N/A\-agentlib:jdwp=transport=dt_socket,server=y,suspend=n
4935N/A.fl
1178N/A\fP
1178N/A.fi
0N/A
1178N/A.LP
4169N/A.LP
1178N/Aたとえば、次のコマンドは、MyClass アプリケーションを実行して、\f3jdb\fP があとでそのアプリケーションに接続できるようにします。
0N/A.LP
1178N/A.nf
4169N/A\f3
1178N/A.fl
4169N/A % java \-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n MyClass
1178N/A.fl
4169N/A\fP
1178N/A.fi
4169N/A
1178N/A.LP
4169N/A.LP
1178N/A次のコマンドを使用して、\f3jdb\fP を VM に接続できます。
0N/A.LP
1178N/A.nf
1178N/A\f3
0N/A.fl
1178N/A % jdb \-attach 8000
0N/A.fl
1178N/A\fP
4935N/A.fi
0N/A
0N/A.LP
0N/A.LP
0N/Aこの場合、\f3jdb\fP は新しい VM を起動する代わりに既存の VM に接続されるため、\f3jdb\fP コマンド行には「MyClass」は指定しません。
4169N/A.LP
0N/A.LP
0N/Aデバッガを VM に接続するにはほかにもさまざまな方法があり、すべて \f3jdb\fP でサポートされています。接続オプションについては、Java Platform Debugger Architecture の
0N/A.na
4169N/A\f2ドキュメント\fP @
0N/A.fi
4169N/Ahttp://java.sun.com/javase/6/docs/technotes/guides/jpda/conninv.htmlを参照してください。\f3jdb\fP で使用するために J2SE 1.4.2 以前の VM を起動する方法については、
0N/A.na
4169N/A\f21.4.2 のドキュメント\fP @
0N/A.fi
0N/Ahttp://java.sun.com/j2se/1.4.2/docs/guide/jpda/conninv.htmlを参照してください。
0N/A.LP
4169N/A.SS
0N/A基本 jdb コマンド
4169N/A.LP
0N/A.LP
4169N/A基本的な \f3jdb\fP コマンドの一覧を示します。Java デバッガがサポートするコマンドはこれ以外にもあり、それらは \f3jdb\fP の \f2help\fP コマンドを使用して表示できます。
0N/A.LP
4169N/A.RS 3
4169N/A
4169N/A.LP
0N/A.RS 3
0N/A.TP 3
0N/Ahelp または ?
4169N/Aもっとも重要な \f3jdb\fP コマンド \f2help\fP は、認識されたコマンドのリストに簡潔な説明を付けて表示します。
0N/A.TP 3
4169N/Arun
0N/A\f3jdb\fP を起動して必要なブレークポイントを設定したあとに、このコマンドを使用して、デバッグするアプリケーションの実行を開始できます。このコマンドは、既存の VM に接続している場合とは異なり、デバッグするアプリケーションが \f3jdb\fP から起動したときにだけ使用できます。
4169N/A.TP 3
0N/Acont
4169N/Aブレークポイント、例外、またはステップ実行のあとで、デバッグするアプリケーションの実行を継続します。
0N/A.TP 3
4169N/Aprint
0N/AJava オブジェクトおよびプリミティブ値を表示します。プリミティブ型の変数またはフィールドの場合には、実際の値が出力されます。オブジェクトの場合には、短い説明が出力されます。オブジェクトについては、以降の \f2dump\fP コマンドの説明を参照してください。
4169N/A.LP
0N/A\f2注:局所変数を表示するには、その変数を含むクラスが \fP\f2javac(1)\fP\f2 \fP\f2\-g\fP オプションでコンパイルされていなければなりません。
4169N/A.LP
0N/A\f2print\fP では、メソッドの呼び出しを含む多数の簡単な Java 式がサポートされています。 次に例を示します。
4169N/A.RS 3
0N/A.TP 2
4169N/Ao
0N/A\f2print MyClass.myStaticField\fP
4169N/A.TP 2
0N/Ao
4169N/A\f2print myObj.myInstanceField\fP
0N/A.TP 2
4169N/Ao
0N/A\f2print i + j + k\fP (i、j、および k はプリミティブであり、フィールドまたは局所変数のいずれか)
4169N/A.TP 2
0N/Ao
4169N/A\f2print myObj.myMethod()\fP (myMethod が null 以外を返す場合)
0N/A.TP 2
4169N/Ao
0N/A\f2print new java.lang.String("Hello").length()\fP
4169N/A.RE
4169N/A.TP 3
4169N/Adump
0N/Aプリミティブ値の場合には、このコマンドは \f2print\fP と同じです。オブジェクトの場合には、オブジェクト内に定義されている各フィールドの現在の値が出力されます。static フィールドと instance フィールドが出力されます。
0N/A.LP
0N/A\f2dump\fP コマンドでは、\f2print\fP コマンドと同じ式がサポートされます。
4169N/A.TP 3
0N/Athreads
4169N/A現在実行中のスレッドを一覧表示します。スレッドごとに、名前と現在の状態、およびほかのコマンドに使用できるインデックスが出力されます。 次に例を示します。
0N/A.RS 3
4169N/A
0N/A.LP
4169N/A.nf
0N/A\f3
4169N/A.fl
0N/A4. (java.lang.Thread)0x1 main running
4169N/A.fl
0N/A\fP
4169N/A.fi
4169N/A.RE
4169N/Aこの例では、スレッドインデックスは 4 であり、スレッドは java.lang.Thread のインスタンスです。 スレッドの名前は「main」であり、現在実行中です。
0N/A.TP 3
4169N/Athread
0N/A現在のスレッドにするスレッドを選択します。多くの \f3jdb\fP コマンドは、現在のスレッドの設定に基づいて実行されます。スレッドは、\f2threads\fP コマンドで説明したスレッドインデックスとともに指定します。
4169N/A.TP 3
0N/Awhere
4169N/A引数を指定しないで \f2where\fP を実行すると、現在のスレッドのスタックがダンプされます。 \f2where all\fP コマンドは、現在のスレッドグループにあるスレッドのスタックを、すべてダンプします。 \f2where\fP \f2threadindex\fP は、指定されたスレッドのスタックをダンプします。
0N/A.LP
4169N/A現在のスレッドが (ブレークポイントか \f2suspend\fP コマンドによって) 中断している場合は、局所変数とフィールドは \f2print\fP コマンドと \f2dump\fP コマンドで表示できます。\f2up\fP コマンドと \f2down\fP コマンドで、どのスタックフレームをカレントにするかを選ぶことができます。
0N/A.RE
4169N/A
4169N/A.LP
4169N/A.RE
0N/A.SS
4169N/Aブレークポイント
0N/A.LP
4169N/A.RS 3
0N/A
4169N/A.LP
0N/A.LP
4169N/Aブレークポイントは、行番号またはメソッドの最初の命令で \f3jdb\fP に設定できます。 次に例を示します。
0N/A.LP
4169N/A.RS 3
0N/A.TP 2
4169N/Ao
0N/A\f2stop at MyClass:22\fP (MyClass が含まれるソースファイルの 22 行目の最初の命令にブレークポイントを設定)
4169N/A.TP 2
0N/Ao
4169N/A\f2stop in java.lang.String.length\fP (\f2java.lang.String.length\fP メソッドの最初にブレークポイントを設定)
0N/A.TP 2
4169N/Ao
0N/A\f2stop in MyClass.<init>\fP (<init> は MyClass コンストラクタを識別)
0N/A.TP 2
0N/Ao
0N/A\f2stop in MyClass.<clinit>\fP (<clinit> は MyClass の静的初期化コードを識別)
0N/A.RE
4033N/A
0N/A.LP
1178N/A.LP
0N/Aメソッドがオーバーロードされている場合には、メソッドの引数の型も指定して、ブレークポイントに対して適切なメソッドが選択されるようにしなければなりません。たとえば、「\f2MyClass.myMethod(int,java.lang.String)\fP」または「\f2MyClass.myMethod()\fP」と指定します。
4033N/A.LP
4935N/A.LP
4033N/A\f2clear\fP コマンドは、「\f2clear\ MyClass:45\fP」のような構文を使用してブレークポイントを削除します。\f2clear\fP を使用するか、引数を指定しないでコマンドを使用すると、現在設定されているすべてのブレークポイントが表示されます。\f2cont\fP コマンドは実行を継続します。
4033N/A.LP
4935N/A.RE
0N/A.SS
0N/Aステップ実行
4935N/A.LP
0N/A.RS 3
0N/A
4935N/A.LP
0N/A.LP
0N/A\f2step\fP コマンドは、現在のスタックフレームまたは呼び出されたメソッド内で、次の行を実行します。\f2next\fP コマンドは、現在のスタックフレームの次の行を実行します。
4935N/A.LP
0N/A.RE
0N/A.SS
4935N/A例外
0N/A.LP
4033N/A.RS 3
4033N/A
0N/A.LP
0N/A.LP
4935N/Aスローしているスレッドの呼び出しスタック上のどこにも catch 文がない場合に例外が発生すると、VM は通常、例外トレースを出力して終了します。ただし、\f3jdb\fP 環境で実行している場合は、例外が発生すると \f3jdb\fP に制御が戻ります。次に、\f3jdb\fP を使用して例外の原因を診断します。
0N/A.LP
0N/A.LP
0N/Aたとえば、「\f2catch java.io.FileNotFoundException\fP」または「\f2catch mypackage.BigTroubleException\fP」のように \f2catch\fP コマンドを使用すると、デバッグされたアプリケーションは、ほかの例外がスローされたときに停止します。例外が特定のクラス (またはサブクラス) のインスタンスの場合は、アプリケーションは例外がスローされた場所で停止します。
0N/A.LP
0N/A.LP
0N/A\f2ignore\fP コマンドを使うと、以前の \f2catch\fP コマンドの効果が無効になります。
0N/A.LP
0N/A.LP
0N/A\f2注:\fP\f2ignore\fP コマンドでは、デバッグされる VM は例外を無視せず、デバッガだけが例外を無視します。
0N/A.LP
0N/A.RE
4935N/A.RE
4033N/A.SH "コマンド行オプション"
4033N/A.LP
4935N/A
4033N/A.LP
4033N/A.LP
4935N/Aコマンド行で Java アプリケーション起動ツールの代わりに \f3jdb\fP を使用する場合、\f3jdb\fP は、\f2\-D\fP、\f2\-classpath\fP、\f2\-X<option>\fP など、java コマンドと同じ数のオプションを受け入れます。
0N/A.LP
0N/A.LP
4935N/A\f3jdb\fP は、そのほかに次のオプションを受け入れます。
1178N/A.LP
4935N/A.RS 3
0N/A.TP 3
5176N/A\-help
0N/Aヘルプメッセージを表示します。
0N/A.TP 3
4935N/A\-sourcepath <dir1:dir2:...>
0N/A指定されたパスを使用して、ソースファイルを検索します。このオプションが指定されていない場合は、デフォルトパスの「.」が使われます。
0N/A.TP 3
4935N/A\-attach <address>
0N/Aデフォルトの接続機構を使用して、すでに実行中の VM にデバッガを接続します。
0N/A.TP 3
4935N/A\-listen <address>
0N/A実行中の VM が標準のコネクタを使って指定されたアドレスに接続するのを待機します。
0N/A.TP 3
4935N/A\-listenany
1178N/A実行中の VM が標準のコネクタを使って利用可能な任意のアドレスに接続するのを待機します。
1178N/A.TP 3
1178N/A\-launch
4033N/Aデバッグするアプリケーションを jdb の起動後ただちに起動します。このオプションによって、\f2run\fP コマンドを使用する必要がなくなります。デバッグするアプリケーションは、起動後、初期アプリケーションクラスがロードされる直前に停止します。その時点で、必要なブレークポイントを設定し、\f2cont\fP を使用して実行を継続できます。
0N/A.TP 3
0N/A\-listconnectors
4033N/Aこの VM で利用できるコネクタを一覧表示します。
0N/A.TP 3
0N/A\-connect <connector\-name>:<name1>=<value1>,...
一覧表示された引数の値と指定のコネクタを使ってターゲット VM に接続します。
.TP 3
\-dbgtrace [flags]
jdb のデバッグ情報を出力します。
.TP 3
\-tclient
Java HotSpot(tm) VM (クライアント) 内でアプリケーションを実行します。
.TP 3
\-tserver
Java HotSpot(tm) VM (サーバー) 内でアプリケーションを実行します。
.TP 3
\-Joption
jdb の実行に使用される Java 仮想マシンに \f2option\fP を渡します。(アプリケーション Java 仮想マシンに対するオプションは、\f3run\fP コマンドに渡される)。たとえば、\f3\-J\-Xms48m\fP と指定すると、スタートアップメモリーは 48M バイトに設定されます。
.RE
.LP
.LP
デバッガとデバッグを行う VM を接続するための代替機構に対して、その他のオプションがサポートされています。その他の接続オプションについては、Java Platform Debugger Architecture の
.na
\f2ドキュメント\fP @
.fi
http://java.sun.com/javase/6/docs/technotes/guides/jpda/conninv.htmlを参照してください。
.LP
.SS
デバッグ対象のプロセスに転送されるオプション
.LP
.RS 3
.TP 3
\-v \-verbose[:class|gc|jni]
冗長モードにします。
.TP 3
\-D<name>=<value>
システムプロパティーを設定します。
.TP 3
\-classpath <directories separated by ":">
クラスを検索するディレクトリを一覧表示します。
.TP 3
\-X<option>
非標準ターゲット VM オプションです。
.RE
.LP
.SH "関連項目"
.LP
.LP
.LP
javac(1)、java(1)、javah(1)、javap(1)、javadoc(1)
.LP
.LP