Throwable.PrintStackTrace 方法

定义

重载

名称 说明
PrintStackTrace()

打印此可引发结果及其回溯到标准错误流。

PrintStackTrace(PrintWriter)

打印此可引发结果及其回溯到指定的打印编写器。

PrintStackTrace(PrintStream)

打印此可引发的输出及其回溯到指定的打印流。

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]);
                }
            }

使用初始化的非 null 原因引发的回溯通常应包括原因的回溯。 此信息的格式取决于实现,但以下示例可能被视为典型:

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 个“表示法用于禁止的异常,就像在原因上使用它一样。 与原因不同,禁止的异常在“包含异常”之外缩进。

异常可以同时具有原因和一个或多个禁止的异常:

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()

本页的某些部分是根据 创建和共享的工作进行的修改,并根据 许可证中所述的条款使用。

适用于

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)

本页的某些部分是根据 创建和共享的工作进行的修改,并根据 许可证中所述的条款使用。

适用于

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)

本页的某些部分是根据 创建和共享的工作进行的修改,并根据 许可证中所述的条款使用。

适用于