堆栈跟踪
外观
< Java 编程
导航 异常 主题: ) |
堆栈跟踪是从应用程序启动时到程序执行当前位置的所有方法调用列表。当异常被抛出时,Java 虚拟机会自动生成堆栈跟踪,以指示异常发生的点以及程序到异常发生的点为止的执行过程。 最近的方法调用位于列表顶部。
|
|
通过调用异常的 public void printStackTrace()
方法,可以将堆栈跟踪打印到标准错误流。
从 Java 1.4 开始,堆栈跟踪被封装在一个名为 java.lang.StackTraceElement
的 Java 类的数组中。堆栈跟踪元素数组由 Throwable.getStackTrace()
方法返回。每个元素代表一个单独的堆栈帧。除堆栈顶部的帧外,所有堆栈帧都代表方法调用。堆栈顶部的帧代表生成堆栈跟踪的执行点。通常,这是创建与堆栈跟踪相对应的可抛出对象的点。
堆栈帧代表以下信息
代码节 6.24:堆栈帧。
public StackTraceElement(String declaringClass,
String methodName,
String fileName,
int lineNumber);
|
创建一个表示指定执行点的堆栈跟踪元素。
在许多情况下,为了调试的目的,我们希望将堆栈跟踪转换为一个 字符串
,以便我们可以将其记录到我们的日志文件中。
以下代码展示了如何做到这一点
代码节 6.25:保存堆栈跟踪。
import java.io.StringWriter;
import java.io.PrintWriter;
...
Exception e = new NullPointerException();
StringWriter outError = new StringWriter();
e.printStackTrace(new PrintWriter(outError));
String errorString = outError.toString();
// Do whatever you want with the errorString
|