語言

Throwable.PrintStackTrace 方法

定義

多載

名稱 Description
PrintStackTrace(PrintStream)

列印此投擲檔及其回溯至指定的列印串流。

PrintStackTrace(PrintWriter)

列印此投擲檔及其回溯至指定的列印寫入器。

PrintStackTrace()

列印這個投擲物及其回溯到標準誤差串流。

PrintStackTrace(PrintStream)

列印此投擲檔及其回溯至指定的列印串流。

[Android.Runtime.Register("printStackTrace", "(Ljava/io/PrintStream;)V", "GetPrintStackTrace_Ljava_io_PrintStream_Handler")]
public virtual void PrintStackTrace(Java.IO.PrintStream s);
[<Android.Runtime.Register("printStackTrace", "(Ljava/io/PrintStream;)V", "GetPrintStackTrace_Ljava_io_PrintStream_Handler")>]
abstract member PrintStackTrace : Java.IO.PrintStream -> unit
override this.PrintStackTrace : Java.IO.PrintStream -> unit

參數

s
PrintStream

PrintStream 用於輸出

屬性

備註

列印此投擲檔及其回溯至指定的列印串流。

Java 文件 java.lang.Throwable.printStackTrace(java.io.PrintStream)

本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。

適用於

PrintStackTrace(PrintWriter)

列印此投擲檔及其回溯至指定的列印寫入器。

[Android.Runtime.Register("printStackTrace", "(Ljava/io/PrintWriter;)V", "GetPrintStackTrace_Ljava_io_PrintWriter_Handler")]
public virtual void PrintStackTrace(Java.IO.PrintWriter s);
[<Android.Runtime.Register("printStackTrace", "(Ljava/io/PrintWriter;)V", "GetPrintStackTrace_Ljava_io_PrintWriter_Handler")>]
abstract member PrintStackTrace : Java.IO.PrintWriter -> unit
override this.PrintStackTrace : Java.IO.PrintWriter -> unit

參數

s
PrintWriter

PrintWriter 用於輸出

屬性

備註

列印此投擲檔及其回溯至指定的列印寫入器。

在 1.1 版本中加入。

Java 文件 java.lang.Throwable.printStackTrace(java.io.PrintWriter)

本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。

適用於

PrintStackTrace()

列印這個投擲物及其回溯到標準誤差串流。

[Android.Runtime.Register("printStackTrace", "()V", "GetPrintStackTraceHandler")]
public virtual void PrintStackTrace();
[<Android.Runtime.Register("printStackTrace", "()V", "GetPrintStackTraceHandler")>]
abstract member PrintStackTrace : unit -> unit
override this.PrintStackTrace : unit -> unit
屬性

備註

列印這個投擲物及其回溯到標準誤差串流。 此方法會在錯誤輸出流上為該 Throwable 物件印出堆疊軌跡,該流為欄位 System.err的值。 輸出的第一行包含該物件方法的 #toString() 結果。 剩餘的線代表先前由方法 #fillInStackTrace()記錄的資料。 此資訊的格式依實作而異,但以下範例可視為典型: <blockquote>

java.lang.NullPointerException
                    at MyClass.mash(MyClass.java:9)
                    at MyClass.crunch(MyClass.java:6)
                    at MyClass.main(MyClass.java:3)

</blockquote> 這個範例是透過執行以下程式產生的:

class MyClass {
                public static void main(String[] args) {
                    crunch(null);
                }
                static void crunch(int[] a) {
                    mash(a);
                }
                static void mash(int[] b) {
                    System.out.println(b[0]);
                }
            }

對於初始化且非空原因的拋擲物,回溯通常應包含該原因的回溯。 此資訊的格式依實作而異,但以下範例可視為典型:

HighLevelException: MidLevelException: LowLevelException
                    at Junk.a(Junk.java:13)
                    at Junk.main(Junk.java:4)
            Caused by: MidLevelException: LowLevelException
                    at Junk.c(Junk.java:23)
                    at Junk.b(Junk.java:17)
                    at Junk.a(Junk.java:11)
                    ... 1 more
            Caused by: LowLevelException
                    at Junk.e(Junk.java:30)
                    at Junk.d(Junk.java:27)
                    at Junk.c(Junk.java:21)
                    ... 3 more

注意包含字元 "..."的行的存在。 這些線表示此例外堆疊追蹤的其餘部分與該例外所造成的堆疊追蹤底部(即「封閉」例外)相符。 這種簡寫方式能大幅縮短輸出長度,特別是在相同方法拋出包裹異常與捕捉「因果異常」時。 上述範例是透過執行以下程式產生的:

public class Junk {
                public static void main(String args[]) {
                    try {
                        a();
                    } catch(HighLevelException e) {
                        e.printStackTrace();
                    }
                }
                static void a() throws HighLevelException {
                    try {
                        b();
                    } catch(MidLevelException e) {
                        throw new HighLevelException(e);
                    }
                }
                static void b() throws MidLevelException {
                    c();
                }
                static void c() throws MidLevelException {
                    try {
                        d();
                    } catch(LowLevelException e) {
                        throw new MidLevelException(e);
                    }
                }
                static void d() throws LowLevelException {
                   e();
                }
                static void e() throws LowLevelException {
                    throw new LowLevelException();
                }
            }

            class HighLevelException extends Exception {
                HighLevelException(Throwable cause) { super(cause); }
            }

            class MidLevelException extends Exception {
                MidLevelException(Throwable cause)  { super(cause); }
            }

            class LowLevelException extends Exception {
            }

自第 7 版起,平台支援 抑制例外 的概念( try配合 -with-resources 陳述)。 為了傳遞例外而被抑制的例外,會被列印在堆疊追蹤下方。 此資訊的格式依實作而異,但以下範例可視為典型:

Exception in thread "main" java.lang.Exception: Something happened
             at Foo.bar(Foo.java:10)
             at Foo.main(Foo.java:5)
             Suppressed: Resource$CloseFailException: Resource ID = 0
                     at Resource.close(Resource.java:26)
                     at Foo.bar(Foo.java:9)
                     ... 1 more

請注意「...N more」符號用於抑制例外,與原因一樣。 與原因不同,被排除的例外在「包含例外」之外縮排。

例外可以同時有原因和一個或多個被抑制的例外:

Exception in thread "main" java.lang.Exception: Main block
             at Foo3.main(Foo3.java:7)
             Suppressed: Resource$CloseFailException: Resource ID = 2
                     at Resource.close(Resource.java:26)
                     at Foo3.main(Foo3.java:5)
             Suppressed: Resource$CloseFailException: Resource ID = 1
                     at Resource.close(Resource.java:26)
                     at Foo3.main(Foo3.java:5)
            Caused by: java.lang.Exception: I did it
             at Foo3.main(Foo3.java:8)

同樣地,排除例外也可能有以下原因:

Exception in thread "main" java.lang.Exception: Main block
             at Foo4.main(Foo4.java:6)
             Suppressed: Resource2$CloseFailException: Resource ID = 1
                     at Resource2.close(Resource2.java:20)
                     at Foo4.main(Foo4.java:5)
             Caused by: java.lang.Exception: Rats, you caught me
                     at Resource2$CloseFailException.&lt;init&gt;(Resource2.java:45)
                     ... 2 more

Java 文件 java.lang.Throwable.printStackTrace()

本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。

適用於