Interstage Application Server チューニングガイド |
目次 索引 |
第7章 JDK/JREのチューニング | > 7.3 チューニング/デバッグ技法 | > 7.3.2 スタックトレース |
JDK/JRE 1.4になって、java.lang.Throwableに次のコンストラクタとメソッドが追加されました。
これにより、スタックトレースには、原因となる例外のスタックトレースも出力されるようになりました。
以降、図1のサンプルを使って、説明します。
1 :public class Test { 2 : 3 : public static void main(String[] args) { 4 : new Test(); 5 : } 6 : 7 : Test() { 8 : try{ 9 : parentMethod(); 10: } catch (Exception e) { 11: e.printStackTrace(); 12: } 13: } 14: 15: void parentMethod() throws HiLevelException { 16: try { 17: childMethod(); 18: } catch (Exception e) { 19: throw new HiLevelException("HiLevel", e); 20: } 21: } 22: 23: void childMethod() throws LowLevelException { 24: throw new LowLevelException("LowLevel"); 25: } 26:} 27: 28:class HiLevelException extends Exception { 29: HiLevelException(String msg, Throwable cause) { 30: super(msg, cause); 31: } 32:} 33: 34:class LowLevelException extends Exception { 35: LowLevelException(String msg) { 36: super(msg); 37: } 38:} |
図1のサンプルを実行すると、図2のスタックトレースが出力されます。
HiLevelException: HiLevel at Test.parentMethod(Test.java:19) at Test.<init>(Test.java:9) at Test.main(Test.java:4) Caused by: LowLevelException: LowLevel at Test.childMethod(Test.java:24) at Test.parentMethod(Test.java:17) ... 2 more |
HiLevelExceptionに続いて、“Caused by:”以降に、原因となるLowLevelExceptionのスタックトレースが出力されています。最終行の“... 2 more”は、“Caused by:”の直前の2行が続きのスタックトレースであることを示しています。
つまり、図3のように解釈することができます。
Caused by: LowLevelException: LowLevel at Test.childMethod(Test.java:24) at Test.parentMethod(Test.java:17) at Test.<init>(Test.java:9) at Test.main(Test.java:4) |
以上から、次のことがわかります。
詳細は、Java APIリファレンスのjava.lang.ThrowableのprintStackTraceメソッドの解説を参照してください。
目次 索引 |