jdb
jdbコマンドとそのオプションは、Javaプラットフォームのプログラムで不具合を検出して修正する場合に使用します。
形式
jdb [options] [classname] [arguments]-
options -
これは、
jdbコマンド行オプションです。「jdbコマンドのオプション」を参照してください。 -
classname -
これは、デバッグされるメイン・クラスの名前です。
-
arguments -
これは、クラスの
main()メソッドに渡される引数です。
説明
Javaデバッガ(JDB)は、Javaクラス用の簡単なコマンド行デバッガです。JDBは、jdbコマンドとそのオプションによって呼び出されます。jdbコマンドは、Java Platform Debugger Architectureのデモを示し、ローカルまたはリモートのJVMの検査とデバッグを提供します。
JDBセッションの開始
JDBセッションを開始するには様々な方法があります。最も頻繁に使用されるのは、デバッグ対象のアプリケーションのメイン・クラスを使用して、JDBから新しいJVMを起動する方法です。これを行うには、コマンド行でjavaコマンドの代わりにjdbコマンドを入力します。たとえば、アプリケーションのメイン・クラスがMyClassの場合は、JDB環境でデバッグするときに次のコマンドを使用します。
jdb MyClass
この方法で起動すると、jdbコマンドは、指定されたパラメータを使用して2つ目のJVMを呼び出し、指定されたクラスをロードし、JVMを停止してから、そのクラスの最初の命令を実行します。
jdbコマンドのもう1つの使用方法は、すでに実行しているJVMに接続する方法です。JVMの実行中にjdbコマンドが接続するJVMを起動するための構文は、次のとおりです。これは、インプロセス・デバッグ用ライブラリをロードし、接続の種類を指定します。
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n MyClass
その後、次のコマンドを使用して、jdbコマンドをJVMに接続できます。
jdb -attach 8000
8000は、実行中のJVMのアドレスです。
この場合、jdbコマンドは新しいJVMを起動するかわりに既存のJVMに接続するため、jdbコマンド行にはMyClass引数が指定されません。
デバッガをVMに接続するには他にも様々な方法があり、すべてjdbコマンドでサポートされています。接続オプションについては、Java Platform Debugger Architectureのドキュメントを参照してください。
ブレークポイント
ブレークポイントは、行番号またはメソッドの最初の命令でJDBに設定できます。たとえば:
-
コマンド
stop at MyClass:22は、MyClassが含まれるソース・ファイルの22行目の最初の命令にブレークポイントを設定します。 -
コマンド
stop in java.lang.String.lengthは、java.lang.String.lengthメソッドの先頭にブレークポイントを設定します。 -
コマンド
stop in MyClass.<clinit>は、<clinit>を使用してMyClassの静的初期化コードを識別します。
メソッドがオーバーロードされている場合は、メソッドの引数の型も指定して、ブレークポイントに対して適切なメソッドが選択できるようにする必要があります。たとえば、MyClass.myMethod(int,java.lang.String)またはMyClass.myMethod()と指定します。
clearコマンドは、clear MyClass:45のような構文を使用してブレークポイントを削除します。引数を付けずにclearまたはstopコマンドを使用すると、現在設定されているすべてのブレークポイントのリストが表示されます。contコマンドは実行を継続します。
ステップ実行
stepコマンドは、現在のスタック・フレーム内と呼び出されたメソッド内のどちらにあるのかに関係なく、次の行に実行を進めます。nextコマンドは、現在のスタック・フレームの次の行を実行します。
例外
スローしているスレッドの呼出しスタック内のどこにもcatch文がない場合に例外が発生すると、JVMは通常、例外トレースを出力して終了します。ただし、JDB環境で実行している場合は、例外が発生するとJDBに制御が戻ります。次に、jdbコマンドを使用して例外の原因を診断できます。
たとえば、catch java.io.FileNotFoundExceptionまたはcatch mypackage.BigTroubleExceptionのようにcatchコマンドを使用すると、デバッグ対象のアプリケーションは他の例外がスローされたときに停止します。例外が特定のクラスまたはサブクラスのインスタンスの場合は、アプリケーションは例外がスローされた場所で停止します。
ignoreコマンドを使用すると、以前のcatchコマンドの効果が無効になります。ignoreコマンドでは、デバッグ対象のJVMで特定の例外が無視されず、デバッガのみが無視されます。
jdbコマンドのオプション
コマンド行でjavaコマンドのかわりにjdbコマンドを使用すると、jdbコマンドは、javaコマンドと同じオプションの多くを受け入れます。
jdbコマンドでは、次のオプションが受け入れられます。
-
-help -
ヘルプ・メッセージを表示します。
-
-sourcepath dir1:dir2:... -
指定されたパスを使用して、指定されたパス内のソース・ファイルを検索します。このオプションが指定されていない場合は、デフォルト・パスであるドット(.)を使用します。
-
-attach address -
デフォルトの接続メカニズムを使用して、実行中のJVMにデバッガを接続します。
-
-listen address -
実行中のJVMが標準のコネクタを使用して指定されたアドレスに接続するまで待機します。
-
-listenany -
実行中のJVMが標準のコネクタを使用して使用可能な任意のアドレスに接続するのを待機します。
-
-launch -
デバッグ対象のアプリケーションを
jdbコマンドの起動直後に起動します。-launchオプションを指定すれば、runコマンドを使用する必要がなくなります。デバッグ対象のアプリケーションは、起動後、初期アプリケーション・クラスがロードされる直前に停止します。その時点で、必要なブレークポイントを設定し、contコマンドを使用して実行を継続できます。 -
-listconnectors -
このJVMで使用できるコネクタをリストします。
-
-connect connector-name:name1=value1.... -
指定のコネクタおよび一覧表示された引数の値を使用して、ターゲットJVMに接続します。
-
-dbgtrace [flags] -
jdbコマンドのデバッグに関する情報を出力します。 -
-tclient -
Java HotSpot VMクライアントでアプリケーションを実行します。
-
-tserver -
Java HotSpot VMサーバーでアプリケーションを実行します。
-
-Joption -
JVMに
optionを渡します。ここでoptionは、Javaアプリケーションランチャのリファレンス・ページに記載されているいずれかのオプションです。たとえば、-J-Xms48mと指定すると、スタートアップ・メモリーは48Mバイトに設定されます。「javaのオプションの概要」を参照してください。
次のオプションは、デバッガ・プロセスに転送されます。
-
-v -verbose[:class|gc|jni] -
冗長モードにします。
-
-Dname=value -
システム・プロパティを設定します。
-
-classpath dir -
クラスが検索されるディレクトリをコロンで区切ったリストを表示します。
-
-X option -
非標準のターゲットJVMオプションです。
デバッガとデバッグ対象のJVMを接続するための代替メカニズムを提供するために、その他のオプションもサポートされています。