Node調試之 谷歌Inspect擴展程序

一、安裝 Node.js V8 Inspector(不是必須)

Node.js V8 Inspector 是Chrome的一個調試node的擴展程序,可以去谷歌商品下載。

不下載的話可以用 Chrome DevTools 自帶的。

二、示例程序

爲了方便講解,下面是一個示例腳本。首先,新建一個工作目錄,並進入該目錄。

$ mkdir debug-demo
$ cd debug-demo

然後,生成package.json文件,並安裝 Koa 框架和 koa-route 模塊。

$ npm init -y
$ npm install --save koa koa-route

接着,新建一個腳本app.js,並寫入下面的內容。

// app.js
const 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

顯示 Debugger attached 表示 debugger 模式已經開啓了。

上面代碼中,--inspect參數是啓動調試模式必需的。這時,打開瀏覽器訪問http://127.0.0.1:3000,就可以看到 Hello World 了。

接下來,就要開始調試了。一共有兩種打開調試工具的方法,第一種是在 Chrome 瀏覽器的地址欄,鍵入 chrome://inspect 或者about:inspect,回車後就可以看到下面的界面。

在 Target 部分,點擊 inspect 鏈接,就能進入調試工具了。

第二種進入調試工具的方法,是在Chrome開發者工具有一個 Node 的綠色標誌,點擊就可以進入。

如果下載了 Node.js V8 Inspector 擴展程序,也可以從這裏打開:

四、設置斷點

進入 Sources 面板,找到正在運行的腳本app.js

在第11行(也就是下面這一行)的行號上點一下,就設置了一個斷點。

ctx.response.body = 'Hello ' + name;

 

這時,瀏覽器訪問 http://127.0.0.1:3000/alice ,頁面會顯示正在等待服務器返回。切換到調試工具,可以看到 Node 主線程處於暫停(paused)階段。

進入 Console 面板,輸入 name,會返回 alice。這表明我們正處在斷點處的上下文(context)。

五、調試非服務腳本

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.js
30541 pts/12   S+     0:00 grep app.js

上面命令中,app.js的進程號是30464

接着,運行下面的命令。

$ node -e 'process._debugProcess(30464)'

上面命令會建立進程 30464 與調試工具的連接,然後就可以打開調試工具了。

還有一種方法,就是向腳本進程發送 SIGUSR1 信號,也可以建立調試連接。

$ kill -SIGUSR1 30464

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章