「Java」JDK同梱ツール jdb でデバッグ

Javaデバッグには、今まで EclipseNetbeans についてるものしか使ったことなかったけど、
JDK 同梱の jdb なるツールでもデバッグ可能みたい。
あんまり使う場面もないだろうけど、ちょっと調べてみたので、その時のメモ。
http://docs.oracle.com/javase/jp/6/technotes/tools/windows/jdb.html


1. デバッグするソースコードを書く

意味のないコードだけど、以下のようなものを用意。

class jdbTest {
	
	int id = 1;
	
	public static void main(String[] args) {
		String name;
		jdbTest jt = new jdbTest();
		name = jt.setName("hoge");
		System.out.println("id : " + jt.id + " name : " + name);
	}
	
	public String setName(String s) {
		return s;
	}
}


2. ソースコードをコンパイルする

g オプションを指定してコンパイルする。これでデバッグの情報が生成されるみたい。
http://docs.oracle.com/javase/jp/6/technotes/tools/windows/javac.html

javac -g jdbTest.java


3. jdb を起動する

jdb jdbTest


4. 処理を止めたい箇所にブレークポイントを設定する

stop at jdbTest:13


5. 処理を実行する

run jdbTest

すると、4 で設定したブレークポイントで処理が止まる。

VM が起動しました: 保留した ブレークポイント jdbTest:13 を設定しました

ブレークポイントのヒット: "スレッド=main", jdbTest.main(), line=13 bci=15
13              System.out.println("id : " + jt.id + " name : " + name);

main[1]

この状態で locals でローカル変数、print [変数名] で変数の値とかが確認できる。

main[1] locals
メソッド引数:
args = instance of java.lang.String[0] (id=364)
ローカル変数:
jt = instance of jdbTest(id=365)
name = "hoge"
main[1] print name
 name = "hoge"

cont と入力すると処理を再開できる。


簡単ですが以上。