jdb [options] [classname] [arguments]
options
classname
arguments
Javaデバッガ(JDB)は、Javaクラス用の簡単なコマンド行デバッガです。jdbコマンドとそのオプションはJDBを呼び出します。jdbコマンドは、JDBA (Java Platform Debugger Architecture)を視覚的に実行し、ローカルまたはリモートのJava Virtual Machine (JVM)の検査とデバッグを行うことができます。Java Platform Debugger Architecture (JDBA) (http://docs.oracle.com/javase/8/docs/technotes/guides/jpda/index.html)を参照してください。
JDBセッションを開始するには様々な方法があります。最も頻繁に使用されるのは、デバッグするアプリケーションのメイン・クラスを使用して、JDBから新しいJVMを起動する方法です。コマンド行で、javaコマンドのかわりにjdbコマンドを入力します。たとえば、アプリケーションのメイン・クラスがMyClassの場合は、JDB環境でデバッグするときに次のコマンドを使用します。
jdb MyClass
この方法で起動すると、jdbコマンドは、指定されたパラメータを使用して2つ目のJVMを呼び出します。次に、指定されたクラスをロードして、クラスの最初の命令を実行する前にJVMを停止させます。
jdbコマンドのもう1つの使用方法は、すでに実行中のJVMにjdbを接続することです。jdbコマンドが接続するVMを、その実行中に起動するための構文を次に示します。これは、インプロセス・デバッグ用ライブラリをロードし、接続の種類を指定します。
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n MyClass
次のコマンドを使用して、jdbコマンドをJVMに接続できます。
jdb -attach 8000
この場合、jdbコマンドは新しいJVMを起動するかわりに既存のJVMに接続されるため、jdbコマンド行にMyClass引数は指定しません。
デバッガをJVMに接続するには他にも様々な方法があり、すべてjdbコマンドでサポートされています。接続オプションについては、Java Platform Debugger Architectureのドキュメントを参照してください。
基本的なjdbコマンドの一覧を示します。JDBがサポートするコマンドはこれ以外にもあり、それらは-helpオプションを使用して表示できます。
helpまたは?
run
cont
注意: ローカル変数を表示するには、含んでいるクラスが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
threads
4. (java.lang.Thread)0x1 main running
thread
where
現在のスレッドが(ブレークポイントかsuspendコマンドによって)中断している場合は、ローカル変数とフィールドはprintコマンドとdumpコマンドで表示できます。upコマンドとdownコマンドで、どのスタック・フレームを現在のスタック・フレームにするかを選ぶことができます。
ブレークポイントは、行番号またはメソッドの最初の命令で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は特定の例外を無視せず、デバッガのみを無視します。
コマンド行でjavaコマンドのかわりにjdbコマンドを使用する場合、jdbコマンドは、-D、-classpath、-Xなど、javaコマンドと同じ数のオプションを受け入れます。jdbコマンドは、その他に次のリストにあるオプションを受け入れます。
デバッグを行うJVMにデバッガを接続するための代替機構を提供するために、その他のオプションがサポートされています。これらの接続の代替に関する詳細なドキュメントは、Java Platform Debugger Architecture (JPDA) (http://docs.oracle.com/javase/8/docs/technotes/guides/jpda/index.html)を参照してください
-help
-sourcepath dir1:dir2: . . .
-attach address
-listen address
-launch
-listconnectors
-connect connector-name:name1=value1
-dbgtrace [flags]
-tclient
-tserver
-Joption
-v -verbose[:class|gc|jni]
-Dname=value
-classpath dir
-Xoption