netail.net
自作フリーソフトや,ゲームに関する雑記を公開してます.
日記はソフトウェア工学の論文ネタが中心です.
最近のお知らせ (古いものはこちら)
2008-12-27 [長年日記] ▲
_ [Eclipse][Java][ツール] ブレークポイントごとに変数の内容を出力するプラグイン ▲
Java プログラムの動的解析を簡単に実行する方法として,Eclipse からのプログラム実行方法を色々と実験してます.
その副産物として,デバッグ実行時,ブレークポイントで停止したときの変数の内容をテキストファイルに書き出す Heapdumpプラグイン(仮) というのができたので,とりあえず現状のバイナリのみ置いておきます.
このプラグインをインストールすると,デバッグの構成ダイアログから,「Heapdump for Java」という構成が作れるようになります.この構成でプログラムをデバッグ実行すると,ブレークポイントで停止したとき,スタックフレームに載ってる変数の情報がテキストファイルに出力されます.変数名,型名,値の情報は,Eclipseデバッガの変数欄で格納できる文字列とまったく同じです.テキストファイルで読むほうが,オブジェクトのメンバーなどを細かく調べる作業を少しだけ楽にできるようになるだろう,と作ってみたものです.
オブジェクト参照を再帰的に探索する実装をしていますが,全オブジェクトを出力すると大変なことになってしまうので,実行時の構成では,以下のような設定項目を指定する必要があります.
- Output Directory: ファイル出力先のディレクトリ.ここに,ブレークポイントで停止するごとに,1.txt から順番にテキストファイルが作られます.
- Path of Variable Names and Type Names: 出力したいオブジェクトの変数名あるいは型名の条件を,スラッシュ区切りで指定します.デフォルトの
*
は,スタックフレーム上のすべての変数を意味します.スラッシュ以下は,オブジェクトや配列のメンバーを意味します.たとえば
this/int
なら,this に含まれた int 型のメンバー全員を出力します.また,x/Field*/*
なら,xという変数名あるいは型名で参照されたオブジェクトの情報を取得し,その中の「Field」という文字列で始まる変数名あるいは型名のフィールドで参照されているオブジェクトを列挙し,そのメンバー全員を出力します.スラッシュの数で,何階層下まで探索するかが決まります.大量に出力すると,ブレークポイントで停止したタイミングでの出力処理に時間がかかり,一時的に Eclipse の UI 更新が止まって見えます.
- Number of Stackframes: いくつのスタックフレームの内容を出力するかを指定します.
1なら実行中のメソッドから参照できる変数のみ,2ならそのメソッドの呼び出し側スタックの内容も出力する,というようになります.
- Max Number of Variables: いくつの変数の情報を出力したら探索を停止するかを指定します.
1週間くらいで作った即席ツールなので,あんまり洗練されてはいませんが,使ってみたい人はご自由にどうぞ.