Java Tips:どこから呼ばれているか調べるには?:JAVA Developer
例外が発生した時に、printStackTraceメソッドが出力するスタックトレースを見ると、どのような過程を経て該当個所が呼び出されているかが分かります。このTipsでは、例外が発生していない個所でそのような情報を得る方法を紹介します。
スタックトレースで呼び出しの過程を知る
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
例外の処理がとくに決まっていないときに,スタックトレースを表示することがあります。
デバッグ時には,スタックトレースが有効な情報となることが多いのですが,例外が発生していないケースでもスタックトレースが知りたいことがあります。やや特殊なケースを含めて,次のようなケースがあげられます。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
これ以外にも,動作をチェックするうえで呼び出しの過程をたどれると得られる情報は多いため,任意のタイミングでスタックトレース情報を取得できるとなにかと便利です。ここでは,スタックトレースを生成することで呼び出し過程を調べる方法を紹介しましょう。
スタックトレースは決まり文句
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
さっそくですが,スタックトレースは,次のような決まり文句で取得できます。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
ここで登場するStackTraceElementとThrowableは,いずれもjava.langパッケージのクラスです。そのためとくにimportしなくてもかまいません。
1つのStackTraceElementが1つの「メソッド呼び出し」に相当します。このクラスの主要なメソッドを次の表にまとめました。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
この表で,呼び出しを行っている命令のことを「実行ポイント」と呼びます。getLineNumberメソッドだけがintの値を返し,それ以外はStringを返します。これを標準出力に表示するなり,ログに記録するなりするのが一般的でしょう。
なお,クラス名とファイル名が別に取得できる点に注意してください。これは,たとえば内部クラスの場合に有効になりますが,getClassNameで完全修飾クラス名(FQCN)が得られるため,通常はこの例のようにクラス名を扱うことになるでしょう。
「JAVA Developer」より毎週役立つJava Tipsを配信中。ほかにも参考になるTipsは、JAVA Developerサイトのバックナンバーから探すことが可能です。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
Copyright(C) 2010 SOFTBANK Creative Inc. All Right Reserved.