使用 Node.js 內建偵錯工具進行偵錯

已完成

偵錯是一種多階段應用程式,通常會遵循下列步驟:

  1. 識程式中的 Bug。
  2. 在程式碼中尋找 Bug 的位置。
  3. 分析 Bug 發生的原因。
  4. 修正 Bug。
  5. 驗證是否確實修正。

在 Node.js 程式中識別出錯誤後,您將面臨的第一項挑戰,就是在程式碼中找出錯誤。 為了達成此目的,其中一個最有效率的方式是逐步執行您的程序代碼,以了解發生問題的位置。

[中斷點]

如果您的程式具有數千行程式碼,逐步執行「所有」程式碼可能會非常沒有效率。 在這種情況下,您可使用中斷點。 中斷點可讓您將程式的正常執行「中斷」,並在程式碼中指定的「點」上暫停。

您可以使用中斷點讓程式正常執行,直到抵達您懷疑存在錯誤的關鍵程式碼區段。 然後,您就可以切換為逐步執行。

根據偵錯工具和程式碼編輯器的不同,有好幾種方式可在程式碼中定義中斷點。

Node.js 檢查模式

由於調試程式具有執行環境的完整存取權,惡意執行者也可以使用它在您的 Node.js 應用程式中插入任意程式碼。 這就是為什麼 Node.js 預設不允許您對執行中的程式進行偵錯。 您必須啟用名為 inspector (檢查者) 模式的特殊模式來允許偵錯。

您必須使用 --inspect 選項啟動應用程式,以允許調試程式 用戶端 將自己附加至應用程式,並控制應用程式執行。

根據預設,當 Node.js 以 選項啟動--inspect時,它會在埠 9229上的主機上127.0.0.1接聽 。 您也可以使用 --inspect=<HOST>:<PORT> 語法來指定自訂的主機和連接埠。

重要

請避免將 Node.js 偵錯工具連接埠繫結到公用 IP 位址或 0.0.0.0。 否則,任何可連線到IP位址的用戶端都可能會連線並控制您的 Node.js 應用程式。 如此一來,攻擊者就可以從遠端在您的執行環境上執行任意程式碼。 此動作可能會導致潛在非常嚴重的安全性缺口。

作為替代方案,您可以使用 --inspect-brk 選項。 其運作方式與 --inspect 相同,但會在程式碼開始之前中斷程式碼執行。 這可讓您連結偵錯工具,花時間設定中斷點並逐步執行程式碼,以找出問題的根本原因。 當您需要偵錯時,請使用此參數 --inspect-brk

  • 競爭條件。
  • 難以重現的間歇性問題。

啟動應用程式並啟用檢查模式之後,您可以使用任何相容的調試程式用戶端來連線到您的應用程式進程。

調試程式用戶端

若要對應用程式進行偵錯,您必須使用調試程式用戶端。 調試程式用戶端是連線到 Node.js 應用程式的程式,可讓您控制其執行。 有許多可用的調試程式用戶端,但最常見的用戶端如下:

  • Visual Studio Code:隨附於 Visual Studio Code 的圖形化調試程式用戶端。 在開發期間進行偵錯時,請使用此選項。
  • node-inspect:隨附於 Node.js 的命令行調試程式用戶端。 在生產環境中偵錯時,請使用此選項。

內建偵錯工具

您可以使用 與 Node.js 配套的 node-inspect 命令行 調試程式客戶端來偵錯 Node.js 應用程式。 這是一個簡單的調試程式,可讓您設定斷點並逐步執行程序代碼。

node inspect <YOUR_SCRIPT>.js

node-inspect 偵錯工具會在啟用檢查模式的情況下執行 Node.js,同時與整合的互動式偵錯工具一起啟動。 其會在程式碼開始之前暫停執行。 您應該會看見偵錯工具提示,表示其已成功啟動。

node inspect myscript.js
< Debugger listening on ws://127.0.0.1:9229/ce3689fa-4433-41ee-9d5d-98b5bc5dfa27
< For help, see: https://nodejs.org/en/docs/inspector
< Debugger attached.
Break on start in myscript.js:1
> 1 const express = require('express');
  2
  3 const app = express();
debug>