javadt デバッガのリリースノート

Java Debug Interface (JDI) のデモとして、簡易な GUI デバッグツール javadt のソースコードが用意されています。javadt は JDI の実例を示すためのものです。完成されたデバッガではなく、実際のデバッグ作業に不可欠な多数の機能は付いていません。

javadt の呼び出し

javadt は、次を実行することによって実行できます。

   java gui.GUI <options>.. <class-name>

この場合、<class-name> は通常、java コマンド行に配置する名前です。注:gui.GUI の呼び出しに使用するクラスパスには、JDI ライブラリ のパスとコンパイル済みの javadt クラスファイルのパスが必要です。必ず Java 2 SDK の lib/tools.jar ファイルをクラスパスに設定してください。

たとえば、次のようにして javadt デバッガを呼び出すことができます。

   javadt gui.GUI -classpath . Hello
注:この -classpath オプションにより、Hello アプリケーションのクラスパスが制御されます。ウィンドウが表示されたら、「run」コマンドを発行してすぐに実行できます。「run」コマンドにクラス名を指定することもできます。シェルからデバッガを呼び出すとき、クラス名は省略しても構いません。

クラスパスは、デバッガ内部から、「classpath」コマンドを使用して設定することもできます。現在、デバッガを最初に呼び出す場合、シェルコマンド行に VM の他の引数を指定する必要があります。最近記述されたクラスパス、VM 引数、メインクラス名、およびプログラム引数は、その後の「run」および「load」コマンドのデフォルトとして保持されます (残念ながら現時点では、同じデバッガの呼び出しから別のデバッグセッションを別のデバッグ対象プロセスで始めようとすると、デバッガはクラッシュする場合があります。シェルを終了してから新しいデバッガプロセスを起動してください。)

javadt の使用

javadt は通常、「現在のスレッド」に関するコンテキストを表示します。現在のスレッドとは、最近ブレークポイントに遭遇したスレッド、キャッチされない例外をスローしたスレッド、あるいはユーザーがステップ実行したスレッドです。これらの 3 つのイベントのいずれかによりプログラム実行が中断された場合、現在のスレッドは存在し、javadt は次のような関連情報を表示します。

また、タブ付きペインで、次に示す 3 つの追加のビューのうちのいずれかを表示することができます。

ソースファイルの名前をクリックすると、ソースビューを表示させることができます。また、スレッドをクリックすると、そのスレッドが現在のスレッドになります。これらの機能は通常、プログラムがブレークポイントなどで中断されているときに使用します。たとえば、スレッド再開後に別のブレークポイントに遭遇すると、現在のスレッドは自動的にリセットされ、表示が更新されます。javadt 画面がタイリング表示されます。画面の大きさは調整できます。

javadt 機能は基本的なもので、コマンド行インタラクションウィンドウも用意されています。このウィンドウから javadt ではまだ開示されていない関数にアクセスできます。特に、ブレークポイントの設定や変数の検証にはコマンド行の使用が必要になります。javadt デバッガコマンドインタプリタは、jdb の機能のサブセットをほぼ実装していますが、さらに少数の独自コマンドも追加されています。「help」コマンドは、コマンドの完全セットとその機能を一覧表示します。最も一般的なコマンドセットのショートカットは、画面上のツールバーで提供されます。

デバッグするプログラムは、デバッガの子として起動できます。また、VM が接続を受け入れられる準備ができていれば、デバッガを既存のプロセスに接続することもできます。デバッガでデバッグ対象を子として起動した場合、アプリケーションのインタラクション区画に、標準入出力およびエラーストリームの行指向インタフェースが表示されます。

デバッガは、ソースパスでプログラムのソースコードを検出し、「use」または「sourcepath」コマンドで設定するように想定されています。ソースパスが正しくないという理由でソースが表示されない場合、ソースパスはいつでも変更できます。その結果、ソースの表示はすぐに更新されます。

プログラムのステップ実行時には、「現在のスレッドがありません」というメッセージが頻繁に表示されます。このメッセージは、スレッドまたは VM が終了しているという意味ではなく、単に現在のスレッドが未定義であるという意味です。このような状況は、ステップ実行中のプログラムが入力などで待機しているとき、不意に発生しやすくなります。ステップ実行に成功した後と同様、VM が停止したように見えますが、これは「中断」ではなく「実行中」とみなされます。VM が中断すると、コマンドインタラクションペインのプロンプトが、スレッド名とフレーム番号を変更することで状態を知らせます。プログラムの実行中は、「Command:」というプロンプトが表示されます。

javadt のソース

javadt の完全なソースコードは、examples.jarcom/sun/tools/example/debug ディレクトリにあります。注:このディレクトリには、jdb のソースも入っています。これらのサンプルアプリケーションのソースコードは、デバッガ開発者のために具体例を示すためのものです。デバッガの開発者によるコード例の使用、変更、再配布は、著作権表示の遵守を条件として認められます。

javadt は次のパッケージ (examples.jarcom/sun/tools/example/debug ディレクトリにある) を使用します。

gui
ユーザーインタフェースコード
bdi
デバッガコアコード
events
イベントセットコード
expr
式処理コード

javadt の構築

提供された debuggers ディレクトリのソースファイルから javadt クラスを構築する場合、必要な作業はソースファイルのコンパイルだけです。クラスパスに JDI ライブラリ を含めること以外、特別なオプションは必要ありません。ただし、ファイル Expr.jj の表現パーサーを変更する場合は、JavaCC パーサージェネレータ が必要です。