如何在我丟擲異常時獲取 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() 方法如何清晰地列印程式執行的堆疊跟蹤。
結論
我們已經看到了兩種在丟擲錯誤時獲取堆疊跟蹤的方法。使用者可以根據自己的理解使用任何一種。通常,在使用終端或後端時使用第二種方法。使用者可以使用第一種方法將堆疊跟蹤記錄到瀏覽器中。
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP