Javaプラットフォームのプログラムで不具合を検出して修正します。
jdb [options] [classname] [arguments]
コマンド行オプション。「オプション」を参照してください。
デバッグされるメイン・クラスの名前です。
クラスのmain()
メソッドに渡される引数です。
Javaデバッガ(JDB)は、Javaクラス用の簡単なコマンド行デバッガです。JDBは、jdb
コマンドとそのオプションによって呼び出されます。jdb
コマンドは、Java Platform Debugger Architecture (JDBA)のデモを示し、ローカルまたはリモートのJava仮想マシン(JVM)の検査とデバッグを提供します。「Java Platform Debugger Architecture (JDBA)」を参照してください。
http://docs.oracle.com/javase/jp/8/technotes/guides/jpda/index.html
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
この場合、jdb
コマンドは新しいJVMを起動するかわりに既存のJVMに接続するため、jdb
コマンド行にはMyClass
引数が指定されません。
デバッガをVMに接続するには他にも様々な方法があり、すべてjdb
コマンドでサポートされています。接続オプションについては、Java Platform Debugger Architectureのドキュメントを参照してください。
基本的なjdb
コマンドの一覧を示します。JDBでは、-help
オプションで一覧表示できるその他のコマンドもサポートされています。
help
または?
コマンドは、認識されたコマンドのリストに簡潔な説明を付けて表示します。
JDBを起動してブレークポイントを設定した後に、run
コマンドを使用すると、デバッグ対象のアプリケーションを実行できます。run
コマンドは、既存のJVMに接続している場合とは異なり、jdb
コマンドがデバッグ対象のアプリケーションを起動したときにのみ使用できます。
ブレークポイント、例外、またはステップ実行のあとで、デバッグするアプリケーションの実行を継続します。
Javaオブジェクトおよびプリミティブ値を表示します。プリミティブ型の変数またはフィールドの場合には、実際の値が出力されます。オブジェクトの場合には、短い説明が出力されます。オブジェクトに関する詳細な情報を見つける方法については、dumpコマンドを参照してください。
注: ローカル変数を表示するには、その変数を含むクラスがjavac -g
オプションでコンパイルされていなければなりません。
print
コマンドでは、メソッドの呼出しを含む多数の簡単なJava式がサポートされています。次に例を示します。
print MyClass.myStaticField print myObj.myInstanceField print i + j + k (i, j, k are primities and either fields or local variables) print myObj.myMethod() (if myMethod returns a non-null) print new java.lang.String("Hello").length()
プリミティブ値の場合、dump
コマンドはprint
コマンドと同じです。オブジェクトの場合、dump
コマンドはオブジェクト内に定義されている各フィールドの現在の値を出力します。staticフィールドとinstanceフィールドが出力されます。dump
コマンドでは、print
コマンドと同じ式がサポートされます。
現在実行中のスレッドを一覧表示します。スレッドごとに、その名前と現在のステータス、および他のコマンドで使用できる索引が出力されます。この例では、スレッド索引は4であり、スレッドはjava.lang.Thread
のインスタンスです。スレッドの名前はmain
であり、現在実行中です。
4. (java.lang.Thread)0x1 main running
現在のスレッドにするスレッドを選択します。多くのjdb
コマンドは、現在のスレッドの設定に基づいて実行されます。スレッドは、threadsコマンドで説明したスレッド索引とともに指定されます。
引数を付けずにwhere
コマンドを使用すると、現在のスレッドのスタックがダンプされます。where
all
コマンドでは、現在のスレッド・グループのスタックがすべてダンプされます。where
threadindex
コマンドでは、指定したスレッドのスタックがダンプされます。
現在のスレッドがブレークポイントやsuspend
コマンドなどのイベントによって中断している場合は、ローカル変数とフィールドをprint
コマンドとdump
コマンドで表示できます。up
コマンドとdown
コマンドでは、現在のスタック・フレームにするスタック・フレームを選択できます。
ブレークポイントは、行番号またはメソッドの最初の命令で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で特定の例外が無視されず、デバッガのみが無視されます。
コマンド行でjava
コマンドの代わりにjdb
コマンドを使用すると、jdb
コマンドは、-D
、-classpath
、-X
オプションなど、java
コマンドと同じ数のオプションを受け入れます。次のリストには、jdb
コマンドで受け入れられる追加のオプションを示します。
デバッガとデバッグ対象のJVMを接続するための代替メカニズムを提供するために、その他のオプションもサポートされています。このような接続の代替方法の詳細は、「Java Platform Debugger Architecture (JPDA)」を参照してください。
http://docs.oracle.com/javase/jp/8/technotes/guides/jpda/index.html
ヘルプ・メッセージを表示します。
指定されたパスを使用して、指定されたパス内のソース・ファイルを検索します。このオプションが指定されていない場合は、デフォルト・パスであるドット(.)を使用します。
デフォルトの接続メカニズムを使用して、実行中のJVMにデバッガを接続します。
実行中のJVMが標準のコネクタを使用して指定されたアドレスに接続するまで待機します。
デバッグ対象のアプリケーションをJDBの起動直後に起動します。-launch
オプションを指定すれば、run
コマンドを使用する必要がなくなります。デバッグ対象のアプリケーションは、起動後、初期アプリケーション・クラスがロードされる直前に停止します。その時点で、必要なブレークポイントを設定し、cont
コマンドを使用して実行を継続できます。
このJVMで使用できるコネクタを一覧表示します。
指定のコネクタおよび一覧表示された引数の値を使用して、ターゲットJVMに接続します。
jdb
コマンドのデバッグに関する情報を出力します。
Java HotSpot VMクライアントでアプリケーションを実行します。
Java HotSpot VMサーバーでアプリケーションを実行します。
JVMにoption
を渡します。ここでoptionは、Javaアプリケーションランチャのリファレンス・ページに記載されているいずれかのオプションです。たとえば、-J-Xms48m
と指定すると、スタートアップ・メモリーは48Mバイトに設定されます。java
(1)を参照してください。