機械翻訳について

jdbコマンド

名前

jdb - Javaプラットフォーム・プログラムでバグを検索して修正

シノプシス

jdb [options] [classname] [arguments]

options
これは、jdbコマンドライン・オプションを表します。 「jdbコマンドのオプション」を参照してください。
classname
これは、デバッグされるメイン・クラスの名前です。
arguments
これは、クラスのmain()メソッドに渡される引数を表します。

説明

Javaデバッガ(JDB)は、Javaクラス用の簡単なコマンド行デバッガです。 JDBは、jdbコマンドとそのオプションによって呼び出されます。 jdbコマンドは、Javaプラットフォーム・デバッガ・アーキテクチャを示し、ローカルまたはリモートのJVMの検査およびデバッグを提供します。

JDBセッションの開始

JDBセッションを開始するには様々な方法があります。 最も頻繁に使用されるのは、デバッグ対象のアプリケーションのメイン・クラスを使用して、JDBから新しいJVMを起動する方法です。 これを行うには、コマンド行でjavaコマンドの代わりにjdbコマンドを入力します。 たとえば、アプリケーションのメイン・クラスがMyClassの場合、次のコマンドを使用してJDBでデバッグします:

jdb MyClass

この方法で起動すると、jdbコマンドは、指定されたパラメータを使用して2つ目のJVMを呼び出し、指定されたクラスをロードし、JVMを停止してから、そのクラスの最初の命令を実行します。

jdbコマンドを使用する別の方法は、すでに実行されている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に接続しているため、MyClass引数がjdbコマンドラインで指定されていません。

デバッガをVMに接続するには他にも様々な方法があり、すべてjdbコマンドでサポートされています。 接続オプションについては、Java Platform Debugger Architectureのドキュメントを参照してください。

ブレークポイント

ブレークポイントは、行番号またはメソッドの最初の命令でJDBに設定できます。たとえば:

メソッドがオーバーロードされている場合は、メソッドの引数の型も指定して、ブレークポイントに対して適切なメソッドが選択できるようにする必要があります。 たとえば、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クライアントでアプリケーションを実行します。
-trackallthreads
仮想スレッドを含むすべてのスレッドを作成時に追跡します。 下記の「仮想スレッドの操作」を参照してください。
-tserver
Java HotSpot VMサーバーでアプリケーションを実行します。
-Joption
JDB JVMにoptionを渡します。ここで、Javaアプリケーション・ランチャの参照ページで説明されているオプションの1つです。 たとえば、-J-Xms48mと指定すると、スタートアップ・メモリーは48Mバイトに設定されます。 java「Javaオプションの概要」を参照してください。

次のオプションは、デバッガ・プロセスに転送されます。

-Roption
デバッグJVMにoptionを渡します。ここで、optionはJavaアプリケーション・ランチャの参照ページで説明されているオプションの1つです。 たとえば、-R-Xms48mは起動メモリーを48 MBに設定します。 java「Javaオプションの概要」を参照してください。
-vまたは-verbose [: class | gc | jni]
冗長モードにします。
-Dname=value
システム・プロパティを設定します。
-classpath dir
クラスが検索されるディレクトリをコロンで区切ったリストを表示します。
-X option
非標準のターゲットJVMオプションです。

デバッガとデバッグ対象のJVMを接続するための代替メカニズムを提供するために、その他のオプションもサポートされています。

仮想スレッドの操作

多くの場合、仮想シードは、デバッガを圧倒できるような大きな数と頻度で作成されます。 このため、デフォルトでは、JDBは作成時に仮想スレッドを追跡しません。 ブレークポイント・イベントなど、イベントが到着した仮想スレッドのみを追跡します。 -trackallthreadsオプションを使用すると、JDBがすべての仮想スレッドを作成時に追跡できます。

JDBは、最初に接続するときに、デバッグ・エージェントからすべての既知のスレッドのリストをリクエストします。 デフォルトでは、デバッグ・エージェントはこのリスト内の仮想スレッドを返しません。これは、リストが大きすぎてデバッガを圧倒する可能性があるためです。 デバッグ・エージェントには、この動作を変更するために有効にできるincludevirtualthreadsオプションがあり、すべての既知の仮想スレッドがリストに含まれます。 JDB -trackallthreadsオプションを使用すると、JDBがデバッグするアプリケーションを起動したときに、JDBによって自動的にデバッグ・エージェントのincludevirtualthreadsオプションが有効になります。 ただし、デバッグ対象アプリケーションにアタッチされるJDBより前に作成された仮想スレッドについては、デバッグ・エージェントが認識していない場合があることに注意してください。