メソッドの呼び出し履歴を見る
題名そのまんま、メソッドがどこからどうやって呼び出されたかを見るユーティリティーを作ってみた。簡単なデバッグには結構使えるかも。
public
final
class
LineInfomation {
private
LineInfomation() {}
public
static
void
dispLineNumber(PrintStream out) {
try
{
throw
new
Exception();
}catch
(Exception e) {
StackTraceElement[] elems = e.getStackTrace();
// 最初(i == 0)の要素はこのメソッドの情報なので、不要
for
(int
i =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。