メソッドの呼び出し履歴を見る
題名そのまんま、メソッドがどこからどうやって呼び出されたかを見るユーティリティーを作ってみた。簡単なデバッグには結構使えるかも。
publicfinalclassLineInfomation {
privateLineInfomation() {}
publicstaticvoiddispLineNumber(PrintStream out) {
try{
thrownewException();
}catch(Exception e) {
StackTraceElement[] elems = e.getStackTrace();
// 最初(i == 0)の要素はこのメソッドの情報なので、不要
for(inti =1; i < elems.length; i++)
out.println(
elems[i].getLineNumber() +"行目:"+
elems[i].getClassName() +"."+
elems[i].getMethodName() +"\t(" +
elems[i].getFileName() +")");
}
}
}
要は例外投げて、それを自分で受け取って、スタックトレースを出力するだけ。ただし、getStackTraceで取得できるStackTraceElementの配列の一番初めの要素には、このメソッドの情報が入ってるから拡張for文じゃなくて普通のfor文で回している。
あと、引数としてPrintStreamを要求しているけど、これは余計なお世話かも。デフォルトをSystem.outにしておいて、setOutput的なメソッド追加して、そこで出力先を切り替えられるほうが多分便利。
ただ、そうなるとファイル出力とかにも対応したくなるわけで、ちょっと面倒なことに*1。