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を接続するための代替メカニズムを提供するために、その他のオプションもサポートされています。