如何在我丟擲異常時獲取 JavaScript 堆疊跟蹤?


本教程將教會我們如何在丟擲異常時獲取 JavaScript 堆疊跟蹤。通常,開發人員使用堆疊跟蹤來識別程式程式碼執行期間的錯誤。但是,我們使用堆疊跟蹤來除錯程式。

使用堆疊跟蹤,我們可以瞭解程式中任何型別的異常,例如建構函式錯誤、命名錯誤等,並可以對其進行更正。

在我們開始使用堆疊跟蹤分析錯誤之前,我們應該瞭解堆疊跟蹤是如何工作的。

呼叫堆疊跟蹤是如何工作的?

堆疊是主要的資料結構,遵循 LIFO(後進先出)屬性。當我們在機器上執行任何程式時,作業系統會在堆疊或堆中為程式分配一些動態記憶體。在大多數情況下,它以堆疊格式分配,因為它易於管理。

例如,我們有兩個名為 child()parent() 的函式,如下所示。

function child() {
   // code for child function
}
Function parent() {
   child();
   // code for parent function.
}
parent();

在上面的程式碼片段中,當我們開始執行程式時,它會獲得作業系統分配的堆疊跟蹤,並且 parent() 函式進入堆疊跟蹤。之後,將從父函式呼叫 child() 函式。因此,它進入堆疊的頂部。

當程式執行完成時,child() 函式將首先從堆疊中刪除,然後是 parent() 函式。

現在,使用者可以考慮這樣的場景:我們不知道哪個函式丟擲了錯誤。他們可以在任何函式中列印堆疊跟蹤,瞭解錯誤並解決它。

以下是 JavaScript 程式中列印堆疊跟蹤的不同方法。

  • 使用 Error 物件屬性
  • 使用 console.trace() 方法

使用 Error 物件屬性

在這種方法中,我們將建立一個新的 錯誤物件進行演示,並從函式返回錯誤堆疊。錯誤堆疊還會根據流程列印程式的整個 堆疊跟蹤,其中包含從程式開始到最近執行的所有函式呼叫。

語法

使用者可以按照以下語法獲取錯誤堆疊跟蹤。

function() {
   // execution code for the function
   var error = new Error();
   return error.stack;
}

在語法中,我們使用 error 類的建構函式(即 new Error())建立了錯誤。

示例 1

以下示例演示了當我們從任何函式丟擲錯誤時如何列印堆疊跟蹤。

<!DOCTYPE html>
<html>
<body>
   <h2>The stack trace when we throw an exception.</h2>
   <p id="resultDiv"> </p>
   <script type="text/javascript">
      // this function contains error
      // it prints stack trace for all function from parent to getStrackTrace
      function getStackTrace() {
         var error = new Error();
         let resultDiv = document.getElementById("resultDiv");
         resultDiv.innerHTML = error.stack;
      }
      function child() {
         getStackTrace();
      }
      function parent() {
         child();
      }
      // call the parent function
      parent();
   </script>
</body>
</html>

在上面的輸出中,使用者可以看到它顯示了從父函式到丟擲錯誤的 getStackTrace() 函式的整個堆疊跟蹤。此外,它還逐行顯示每個堆疊元素,這有助於程式設計師定位錯誤並找到更好的解決方案。

使用 console.trace() 方法

在這種方法中,我們將使用 console.trace() 方法。這是一種非常直接的方法,可以列印程式到當前行執行的堆疊跟蹤。開發人員可以在函式或程式中呼叫該方法,它會列印堆疊跟蹤,使用者可以除錯整個程式碼。

語法

使用者可以按照以下語法使用 console.trace() 方法。

function() {
   // function body
   // console.trace();
}

示例 2

以下示例演示瞭如何使用 console.trace() 方法列印堆疊跟蹤。它在控制檯中列印輸出。

<!DOCTYPE html>
<html>
<body>
   <h2>The stack trace when we throw an exception. </h2>
   <p> Clicking "Trace" button calls startExecution function,
      which calls middleOfExecution and printStackTrace, printStackTrace fucntion calls console.trace(),
which displays the trace in the console.</p>
   <p>Remember to open the console before you click "Trace".</p>
   <button onclick="startExecution()">Trace</button>
   <script type="text/javascript">
      function printStackTrace(string) {
         // create new error and logging it by console.
         // var error = new Error();
         console.trace(string);
         return 10 * 20;
      }
      function middleOfExecution() {
         console.log(10 * 20);
         return 10 * 20;
      }

      // call the printStackTrace function inside this.
      function startExecution() {
         middleOfExecution();
         let string = "tutorialsPoint";
         printStackTrace(string);
         console.log(string);
      }
   </script>
</body>
</html>

在上面的輸出中,使用者可以看到 console.trace() 方法如何清晰地列印程式執行的堆疊跟蹤。

結論

我們已經看到了兩種在丟擲錯誤時獲取堆疊跟蹤的方法。使用者可以根據自己的理解使用任何一種。通常,在使用終端或後端時使用第二種方法。使用者可以使用第一種方法將堆疊跟蹤記錄到瀏覽器中。

更新於: 2022年7月12日

3K+ 次檢視

啟動您的 職業生涯

透過完成課程獲得認證

開始
廣告

© . All rights reserved.