淺談Node 調試工具入門教程,node調試工具

來源:互聯網
上載者:User

淺談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 的綠色標誌,點擊就可以進入。

三、調試工具視窗

調試工具其實就是"開發人員工具"的定製版,省去了那些對伺服器指令碼沒用的部分。

它主要有四個面板。

  1. Console:控制台
  2. Memory:記憶體
  3. Profiler:效能
  4. 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

以上就是本文的全部內容,希望對大家的學習有所協助,也希望大家多多支援幫客之家。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.