Interstage Application Server チューニングガイド
目次 索引 前ページ次ページ

第7章 JDK/JREのチューニング> 7.3 チューニング/デバッグ技法> 7.3.2 スタックトレース

7.3.2.3 スタックトレースの解析方法(その3)

 JDK/JRE 1.4になって、java.lang.Throwableに次のコンストラクタとメソッドが追加されました。

 これにより、スタックトレースには、原因となる例外のスタックトレースも出力されるようになりました。

 以降、図1のサンプルを使って、説明します。

[図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のスタックトレースが出力されます。

[図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のように解釈することができます。

[図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メソッドの解説を参照してください。


目次 索引 前ページ次ページ

Copyright 20078 FUJITSU LIMITED