Interstage Application Server/Interstage Web Server チューニングガイド |
目次 索引 |
第7章 JDK/JREのチューニング | > 7.3 チューニング/デバッグ技法 | > 7.3.2 スタックトレース |
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メソッドの解説を参照してください。
目次 索引 |