目錄
本文範例
V8 Inspector Protocol Chrome DevTools
如何進入Chrome 的調試介面
Attach to Node Process Action
總結
首頁 web前端 js教程 聊聊調試 Node.js 程式碼的兩種方式

聊聊調試 Node.js 程式碼的兩種方式

Nov 30, 2021 pm 07:01 PM
node.js 偵錯程式碼

如何除錯你的 Node 程式碼?以下這篇文章為大家介紹兩種常見的調試 Node.js 的方式,有一定的參考價值,希望對大家有幫助!

聊聊調試 Node.js 程式碼的兩種方式

很多時候,我苦惱於Node.js 的調試,只會使用console.log 這種帶有侵入性的方法,但其實Node.js 也可以做到跟瀏覽器調試一樣的方便。

本文環境:

mac
Chrome 94.0.4606.81
node v12.12.0
vscode Version: 1.61.1
登入後複製

本文範例

本文範例採用的是先前探索洋蔥模型的,僅有一個文件,就是根目錄下#index.js ,如下:

const Koa = require('koa');

const app = new Koa();
console.log('test')

// 中间件1
app.use((ctx, next) => {
  console.log(1);
  next();
  console.log(2);
});

// 中间件 2 
app.use((ctx, next) => {
  console.log(3);
  next();
  console.log(4);
});

app.listen(9000, () => {
    console.log(`Server is starting`);
});
登入後複製

V8 Inspector Protocol Chrome DevTools

v8 Inspector Protocol 是nodejs v6.3 新加入的調試協議,透過websocket與Client/IDE 交互,同時基於Chrome/Chromium 瀏覽器的devtools 提供了圖形化的調試介面。

我們進入專案根目錄,執行(留意這個8888 端口,後面會用到):

node --inspect=8888 index.js
登入後複製

結果如下:

聊聊調試 Node.js 程式碼的兩種方式

結果出來一個連結-ws://127.0.0.1:8888/5f5c59fc-d42b-4ab0-be15-6feb1a05ed2d。這個連結是 Node.js 和 Chrome 之前通信的 websocket 位址,透過 websocket 通信,我們可以在 Chrome 中即時看到 Node.js 的結果。

如何進入Chrome 的調試介面

第一種方式(自己嘗試無效)

http://localhost:8888 /json/list,其中8888 是上面--inspect 的參數。

[
    {
        "description": "node.js instance",
        "devtoolsFrontendUrl": "chrome-devtools://devtools/bundled/js_app.html?experiments=true&v8only=true&ws=localhost:8888/5f5c59fc-d42b-4ab0-be15-6feb1a05ed2d",
        "devtoolsFrontendUrlCompat": "chrome-devtools://devtools/bundled/inspector.html?experiments=true&v8only=true&ws=localhost:8888/5f5c59fc-d42b-4ab0-be15-6feb1a05ed2d",
        "faviconUrl": "https://nodejs.org/static/images/favicons/favicon.ico",
        "id": "5f5c59fc-d42b-4ab0-be15-6feb1a05ed2d",
        "title": "index.js",
        "type": "node",
        "url": "file:///Users/gpingfeng/Documents/Personal/Test/test-onion/index.js",
        "webSocketDebuggerUrl": "ws://localhost:8888/5f5c59fc-d42b-4ab0-be15-6feb1a05ed2d"
    }
]
登入後複製

很多資料說,可以透過 devtoolsFrontendUrl 就可以直接訪問到,但嘗試了一下,並沒有成功。 【可能跟我的環境有關】

第二種方式

查了一下資料,在stackoverflow 找到對應的方案,如下:

devtools://devtools/bundled/inspector.html?experiments=true&ws=127.0.0.1:8888/5f5c59fc-d42b-4ab0-be15-6feb1a05ed2d
登入後複製

其中devtools://devtools/bundled/inspector.html?experiments=true 是固定的,ws 參數對應的就是websocket 位址。

可以看到介面如下:

聊聊調試 Node.js 程式碼的兩種方式

第三種方式

Chrome 瀏覽器開啟HTTP 監聽接口頁面,打開dev tool,執行完node --inspect=8888 index.js 後可以看到這個圖標,點擊一下:

聊聊調試 Node.js 程式碼的兩種方式

##就可以出現跟瀏覽器一樣的偵錯頁面,例如Sources Panel查看腳本、Profile Panel 監控效能等。

聊聊調試 Node.js 程式碼的兩種方式

另外,可以存取存取

chrome://inspect/#devices,可以看到目前瀏覽器監聽的所有 inspect。

聊聊調試 Node.js 程式碼的兩種方式

Vscode 偵錯

除了瀏覽器之外,各大主流的 IDE 都支援 Node.js 的調試,本文以 Vscode 為例。

Launch Configuration

開啟偵錯頁面,為我們Node 專案新增一個launch 設定:

聊聊調試 Node.js 程式碼的兩種方式

選擇Node.js

聊聊調試 Node.js 程式碼的兩種方式

#這樣就會在專案根目錄產生對應的檔案

.vscode/launch.json(當然你也可以手動建立),其中program 指的就是檔案入口,${workspaceFolder} 指的是根目錄。

{
  // Use IntelliSense to learn about possible attributes.
  // Hover to view descriptions of existing attributes.
  // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
  "version": "0.2.0",
  "configurations": [
    {
      "type": "pwa-node",
      "request": "launch",
      "name": "Launch Program",
      "skipFiles": [
        "<node_internals>/**"
      ],
      "program": "${workspaceFolder}/index.js"
    }
  ]
}
登入後複製
按F5、或點選如下按鈕:

聊聊調試 Node.js 程式碼的兩種方式

#結果:

聊聊調試 Node.js 程式碼的兩種方式

可以看到,左側可以顯示目前作用域的值,呼叫堆疊等訊息,右上方亦可逐步偵錯函數、重啟等功能,非常強大。

Attach to Node Process Action

透過 Attach to Node Process Action 的方式,我們可以直接偵錯執行中的 Node.js 進程。

例如我們先啟動專案-npm run start

然後command shift p(window Ctrl Shift p),輸入Attach to Node Process Action,回車,然後選取執行過程再回車,就可以跟上面配置一樣調試程式碼了。

聊聊調試 Node.js 程式碼的兩種方式

1聊聊調試 Node.js 程式碼的兩種方式

總結

本文總結了兩個常見的除錯 Node.js 的方式。第一種 Node.js 透過 websocket 的方式將資訊傳遞給 Chrome 瀏覽器,我們直接在 Chrome 中進行偵錯。第二種就是透過 Vscode Launch Configuration,自訂配置的方式進行除錯。透過 Attach to Node Process Action 的方式,可以方便的偵錯正在執行的 Node.js 程式碼,而不需要設定。

更多node相關知識,請造訪:nodejs 教學! !

以上是聊聊調試 Node.js 程式碼的兩種方式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

一文聊聊Node中的記憶體控制 一文聊聊Node中的記憶體控制 Apr 26, 2023 pm 05:37 PM

基於無阻塞、事件驅動建立的Node服務,具有記憶體消耗低的優點,非常適合處理海量的網路請求。在海量請求的前提下,就需要考慮「記憶體控制」的相關問題了。 1. V8的垃圾回收機制與記憶體限制 Js由垃圾回收機

圖文詳解Node V8引擎的記憶體和GC 圖文詳解Node V8引擎的記憶體和GC Mar 29, 2023 pm 06:02 PM

這篇文章帶大家深入了解NodeJS V8引擎的記憶體和垃圾回收器(GC),希望對大家有幫助!

深入聊聊Node中的File模組 深入聊聊Node中的File模組 Apr 24, 2023 pm 05:49 PM

文件模組是對底層文件操作的封裝,例如文件讀寫/打開關閉/刪除添加等等文件模組最大的特點就是所有的方法都提供的**同步**和**異步**兩個版本,具有sync 字尾的方法都是同步方法,沒有的都是異

聊聊如何選擇一個最好的Node.js Docker映像? 聊聊如何選擇一個最好的Node.js Docker映像? Dec 13, 2022 pm 08:00 PM

選擇一個Node的Docker映像看起來像是小事,但是映像的大小和潛在漏洞可能會對你的CI/CD流程和安全造成重大的影響。那我們要如何選擇一個最好Node.js Docker映像呢?

Node.js 19正式發布,聊聊它的 6 大功能! Node.js 19正式發布,聊聊它的 6 大功能! Nov 16, 2022 pm 08:34 PM

Node 19已正式發布,以下這篇文章就來帶大家詳解了解Node.js 19的 6 大特性,希望對大家有幫助!

聊聊Node.js中的 GC (垃圾回收)機制 聊聊Node.js中的 GC (垃圾回收)機制 Nov 29, 2022 pm 08:44 PM

Node.js 是如何做 GC (垃圾回收)的?下面這篇文章就來帶大家了解一下。

一起聊聊Node中的事件循環 一起聊聊Node中的事件循環 Apr 11, 2023 pm 07:08 PM

事件循環是 Node.js 的基本組成部分,透過確保主執行緒不被阻塞來實現非同步編程,了解事件循環對建立高效應用程式至關重要。以下這篇文章就來帶大家深入了解Node中的事件循環 ,希望對大家有幫助!

node無法用npm指令怎麼辦 node無法用npm指令怎麼辦 Feb 08, 2023 am 10:09 AM

node無法用npm指令是因為沒有正確配置環境變量,其解決方法是:1、開啟“系統屬性”;2、找到“環境變數”->“系統變數”,然後編輯環境變數;3、找到nodejs所在的資料夾;4、點選「確定」即可。

See all articles