跳轉至內容

堆疊跟蹤

75% developed
來自華夏公益教科書,開放書籍,開放世界

導航 異常 主題:v  d  e )


堆疊跟蹤是從應用程式啟動時到程式執行當前位置的所有方法呼叫列表。當異常被丟擲時,Java 虛擬機器會自動生成堆疊跟蹤,以指示異常發生的點以及程式到異常發生的點為止的執行過程。 最近的方法呼叫位於列表頂部。

Computer code 程式碼清單 6.3:StackTraceExample.java
public class StackTraceExample {
  public static void main(String[] args) {
    method1();
  }

  public static void method1() {
    method11();
  }

  public static void method11() {
    method111();
  }

  public static void method111() {
    throw new NullPointerException("Fictitious NullPointerException");
  }
}
Standard input or output 程式碼清單 6.3 的輸出
Exception in thread "main" java.lang.NullPointerException: Fictitious NullPointerException
at StackTraceExample.method111(StackTraceExample.java:15)
at StackTraceExample.method11(StackTraceExample.java:11)
at StackTraceExample.method1(StackTraceExample.java:7)
at StackTraceExample.main(StackTraceExample.java:3)

透過呼叫異常的 public void printStackTrace() 方法,可以將堆疊跟蹤列印到標準錯誤流。

從 Java 1.4 開始,堆疊跟蹤被封裝在一個名為 java.lang.StackTraceElement 的 Java 類的陣列中。堆疊跟蹤元素陣列由 Throwable.getStackTrace() 方法返回。每個元素代表一個單獨的堆疊幀。除堆疊頂部的幀外,所有堆疊幀都代表方法呼叫。堆疊頂部的幀代表生成堆疊跟蹤的執行點。通常,這是建立與堆疊跟蹤相對應的可丟擲物件的點。

堆疊幀代表以下資訊

Example 程式碼節 6.24:堆疊幀。
public StackTraceElement(String declaringClass,
                         String methodName,
                         String fileName,
                         int lineNumber);

建立一個表示指定執行點的堆疊跟蹤元素。

將堆疊跟蹤轉換為字串

[編輯 | 編輯原始碼]

在許多情況下,為了除錯的目的,我們希望將堆疊跟蹤轉換為一個 字串,以便我們可以將其記錄到我們的日誌檔案中。

以下程式碼展示瞭如何做到這一點

Example 程式碼節 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


Clipboard

待辦事項
新增一些類似於 變數 中的練習


華夏公益教科書