Java Platform, Standard Editionツール・リファレンス
目次      

jdb

Javaプラットフォームのプログラムで不具合を検出して修正します。

形式

jdb [options] [classname] [arguments]

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セッションを開始するには様々な方法があります。もっとも頻繁に使われるのは、デバッグ対象のアプリケーションのメイン・クラスを使用して、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コマンドの一覧を示します。JDBでは、-helpオプションで一覧表示できるその他のコマンドもサポートされています。

helpまたは?

helpまたは?コマンドは、認識されたコマンドのリストに簡潔な説明を付けて表示します。

run

JDBを起動してブレークポイントを設定した後に、runコマンドを使用すると、デバッグ対象のアプリケーションを実行できます。runコマンドは、既存のJVMに接続している場合とは異なり、jdbコマンドがデバッグ対象のアプリケーションを起動したときにのみ使用できます。

cont

ブレークポイント、例外、またはステップ実行のあとで、デバッグするアプリケーションの実行を継続します。

print

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

プリミティブ値の場合、dumpコマンドはprintコマンドと同じです。オブジェクトの場合、dumpコマンドはオブジェクト内に定義されている各フィールドの現在の値を出力します。staticフィールドとinstanceフィールドが出力されます。dumpコマンドでは、printコマンドと同じ式がサポートされます。

threads

現在実行中のスレッドを一覧表示します。スレッドごとに、その名前と現在のステータス、および他のコマンドで使用できる索引が出力されます。この例では、スレッド索引は4であり、スレッドはjava.lang.Threadのインスタンスです。スレッドの名前はmainであり、現在実行中です。

4. (java.lang.Thread)0x1 main      running
thread

現在のスレッドにするスレッドを選択します。多くのjdbコマンドは、現在のスレッドの設定に基づいて実行されます。スレッドは、threadsコマンドで説明したスレッド索引とともに指定されます。

where

引数を付けずに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

-help

ヘルプ・メッセージを表示します。

-sourcepath dir1:dir2: . . .

指定されたパスを使用して、指定されたパス内のソース・ファイルを検索します。このオプションが指定されていない場合は、デフォルト・パスであるドット(.)を使用します。

-attach address

デフォルトの接続メカニズムを使用して、実行中のJVMにデバッガを接続します。

-listen address

実行中の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(1)を参照してください。

デバッガ・プロセスに転送されるオプション

-v -verbose[:class|gc|jni]

冗長モードにします。

-Dname=value

システム・プロパティを設定します。

-classpath dir

クラスが検索されるディレクトリをコロンで区切ったリストを表示します。

-Xoption

非標準のターゲットJVMオプションです。

関連項目

目次      

Copyright © 1993, 2020, Oracle and/or its affiliates. All rights reserved.