Interstage Application Server/Interstage Web 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 2008 FUJITSU LIMITED