• Node.js Video Tutorials

Node.js - 偵錯程式



對於較小的 Node.js 程式碼,您可以使用 `console.log()` 或 `console.debug()` 函式來間歇性地顯示訊息或變數的值以手動除錯程式碼。但是,如果 Node.js 程式碼變得更大更復雜,則手動方法無效。相反,我們可以在 Node.js 執行時使用內建偵錯程式。

考慮如下所示的簡單 Node.js 程式碼 (main.js) −

let marks = [34, 45, 98, 26, 51];
let total = 0;
for (let i = 0; i <= marks.length; i++) {
   total += marks[i];
}
var no = marks.length;
console.log(total/no);

我們期望上述程式計算 5 名學生的平均成績。但是,當我們按如下方式執行它時,結果並非我們期望的那樣:

PS D:\nodejs> node main.js
NaN

在 JavaScript 中,NaN 表示非數字。要追蹤此錯誤,讓我們使用 Node.js 偵錯程式。相反,使用以下命令執行程式:

PS D:\nodejs> node inspect main.js
< Debugger listening on ws://127.0.0.1:9229/ca4aece6-308a-4979-8a32-734fe8ebbd0b
< For help, see: https://nodejs.org/en/docs/inspector
<
connecting to 127.0.0.1:9229 ... ok
< Debugger attached.
<
Break on start in a.js:1
> 1 let marks = [34, 45, 98, 26, 51];
  2
  3 let total = 0;
debug>

內建偵錯程式在 localhost 的 9229 埠啟動。偵錯程式會在程式碼的第一行中斷。

我們透過告訴偵錯程式轉到程式將執行的下一行來單步執行程式碼。Node.js 允許使用以下命令來使用偵錯程式:

序號 命令和描述
1

c 或 cont

繼續執行到下一個斷點或程式結束。

2

n 或 next

移動到下一行程式碼。

3

s 或 step

單步進入函式。預設情況下,我們只單步執行正在除錯的塊或範圍內的程式碼。

4

o

單步退出函式。進入函式後,函式返回時偵錯程式會返回主檔案。

5

pause

暫停正在執行的程式碼。

連續按“n”或“next”鍵來遍歷程式碼。在這個迴圈中,每次迭代都會更改兩個變數——total 和 i。讓我們為這兩個變數設定監視器。

debug> watch('total')
debug> watch('i')

當您在除錯提示符前按“n”時,您可以在監視器下看到這兩個變數的瞬時值。

break in main.js:6
Watchers:
  0: total = 0
  1: i = 0

  4
  5
> 6 for (let i = 0; i <= marks.length; i++) {
  7   total += marks[i];
  8 }

每次按下 next 鍵時,都會在偵錯程式中顯示 total 和 i 的變化值。

在最後一次迭代中,偵錯程式的狀態為:

Watchers:
  0: total = 254
  1: i = 5

  4
  5
> 6 for (let i = 0; i <= marks.length; i++) {
  7   total += marks[i];
  8 }

下次,total 的值將變為 NaN,因為迴圈試圖超出陣列範圍。

Watchers:
  0: total = NaN
  1: i = 6

  4
  5
> 6 for (let i = 0; i <= marks.length; i++) {
  7   total += marks[i];
  8 }

因此,我們可以知道錯誤在於 for 迴圈的構成。內建偵錯程式有助於識別錯誤。

您還可以啟用 VS Code 中的 Node.js 程式碼除錯。按 ctrl+shift+p 開啟命令面板,然後選擇“附加 Node.JS 程序”。然後從“執行”選單啟動程式除錯。它允許您在程式碼中執行“步過”、“步入”和“步出”操作以追蹤程式流程。您還可以對一個或多個變數設定監視器,以便在程式逐行執行時跟蹤其值。

廣告