淺談Node 調試工具入門教程,node調試工具
JavaScript 程式越來越複雜,調試工具的重要性日益凸顯。用戶端指令碼有瀏覽器,Node 指令碼怎麼調試呢?
2016年,Node 決定將 Chrome 瀏覽器的"開發人員工具"作為官方的調試工具,使得 Node 指令碼也可以使用圖形介面調試,這大大方便了開發人員。
本文介紹如何使用 Node 指令碼的調試工具。
一、樣本程式
為了方便講解,下面是一個樣本指令碼。首先,建立一個工作目錄,並進入該目錄。
$ mkdir debug-demo$ cd debug-demo
然後,產生 package.json 檔案,並安裝Koa 架構和 koa-route 模組。
$ npm init -y$ npm install --save koa koa-route
接著,建立一個指令碼 app.js ,並寫入下面的內容。
// app.jsconst Koa = require('koa');const router = require('koa-route');const app = new Koa();const main = ctx => { ctx.response.body = 'Hello World';};const welcome = (ctx, name) => { ctx.response.body = 'Hello ' + name;};app.use(router.get('/', main));app.use(router.get('/:name', welcome));app.listen(3000);console.log('listening on port 3000');
上面代碼是一個簡單的 Web 應用程式,指定了兩個路由,訪問後會顯示一行歡迎資訊。如果想詳細瞭解代碼的詳細含義,可以參考Koa 教程。
二、啟動開發人員工具
現在,運行上面的指令碼。
$ node --inspect app.js
上面代碼中, --inspect 參數是啟動偵錯模式必需的。這時,開啟瀏覽器訪問 http://127.0.0.1//3000,就可以看到 Hello World 了。
接下來,就要開始調試了。一共有兩種開啟調試工具的方法,第一種是在 Chrome 瀏覽器的地址欄,鍵入 chrome://inspect 或者 about:inspect ,斷行符號後就可以看到下面的介面。
在 Target 部分,點擊 inspect 連結,就能進入調試工具了。
第二種進入調試工具的方法,是在 http://127.0.0.1//3000 的視窗開啟"開發人員工具",頂部左上方有一個 Node 的綠色標誌,點擊就可以進入。
三、調試工具視窗
調試工具其實就是"開發人員工具"的定製版,省去了那些對伺服器指令碼沒用的部分。
它主要有四個面板。
- Console:控制台
- Memory:記憶體
- Profiler:效能
- Sources:源碼
這些面板的用法,基本上跟瀏覽器環境差不多,這裡只介紹 Sources (源碼)面板。
四、設定斷點
進入 Sources 面板,找到正在啟動並執行指令碼 app.js 。
在第11行(也就是下面這一行)的行號上點一下,就設定了一個斷點。
ctx.response.body = 'Hello ' + name;
這時,瀏覽器訪問 http://127.0.0.1:3000/alice ,頁面會顯示正在等待伺服器返回。切換到調試工具,可以看到 Node 主線程處於暫停(paused)階段。
進入 Console 面板,輸入 name,會返回 alice。這表明我們正處在斷點處的上下文(context)。
再切回 Sources 面板,右側可以看到 Watch、Call Stack、Scope、Breakpoints 等摺疊項。開啟 Scope 摺疊項,可以看到 Local 範圍和 Global 範圍裡面的所有變數。
Local 範圍裡面,變數 name 的值是 alice ,雙擊進入編輯狀態,把它改成 bob 。
然後,點擊頂部工具列的繼續運行按鈕。
頁面上就可以看到 Hello bob 了。
命令列下,按下 ctrl + c,終止運行 app.js 。
五、調試非服務指令碼
Web 服務指令碼會一直在後台運行,但是大部分指令碼只是處理某個任務,運行完就會終止。這時,你可能根本沒有時間開啟調試工具。等你開啟了,指令碼早就結束運行了。這時怎麼調試呢?
$ node --inspect=9229 -e "setTimeout(function() { console.log('yes'); }, 30000)"
上面代碼中, --inspect=9229 指定調試連接埠為 9229,這是調試工具預設的通訊連接埠。 -e 參數指定一個字串,作為代碼運行。
訪問 chrome://inspect ,就可以進入調試工具,調試這段代碼了。
代碼放在 setTimeout 裡面,總是不太方便。那些已耗用時間較短的指令碼,可能根本來不及開啟調試工具。這時就要使用下面的方法。
$ node --inspect-brk=9229 app.js
上面代碼中, --inspect-brk 指定在第一行就設定斷點。也就是說,一開始運行,就是暫停狀態。
六、忘了寫 --inspect 怎麼辦?
開啟調試工具的前提是,啟動 Node 指令碼時就加上 --inspect 參數。如果忘了這個參數,還能不能調試呢?
回答是可以的。首先,正常啟動指令碼。
$ node app.js
然後,在另一個命令列視窗,尋找上面指令碼的進程號。
$ ps ax | grep app.js 30464 pts/11 Sl+ 0:00 node app.js30541 pts/12 S+ 0:00 grep app.js
上面命令中, app.js 的進程號是 30464 。
接著,運行下面的命令。
$ node -e 'process._debugProcess(30464)'
上面命令會建立進程 30464 與調試工具的串連,然後就可以開啟調試工具了。
還有一種方法,就是向指令碼進程發送 SIGUSR1 訊號,也可以建立調試串連。
$ kill -SIGUSR1 30464
以上就是本文的全部內容,希望對大家的學習有所協助,也希望大家多多支援幫客之家。