Interstage Application Server トラブルシューティング集
目次 索引 前ページ次ページ

第19章 Java実行環境運用時の異常> 19.2 スタックトレース

19.2.2 スタックトレースの分析方法(その2)

 JDK/JRE 1.4では、エラーと例外のスーパークラスであるjava.lang.Throwableに、原因となるjava.lang.Throwableを設定できるコンストラクタとメソッドが追加されました。
 これにより、java.lang.ThrowableのprintStackTraceメソッドなどでは、原因となるjava.lang.Throwableのスタックトレースも出力されます。

 以下、サンプルプログラムを使って、解説します。

  --------------------------------------------------------------------------------
    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:}
  --------------------------------------------------------------------------------

 以下は、上のサンプルプログラムが出力するスタックトレースです。

  --------------------------------------------------------------------------------
    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行が続きのスタックトレースであることを示しています。
 つまり、以下のように解釈することができます。

  --------------------------------------------------------------------------------
    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リファレンス(javadoc)のjava.lang.ThrowableのprintStackTraceメソッドの解説を参照してください。


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

All Rights Reserved, Copyright(C) 富士通株式会社 2005