1. 程式人生 > >欲善其功,必先利其器--Nodejs除錯技術總結

欲善其功,必先利其器--Nodejs除錯技術總結

第三種方式好用~

轉載自: http://www.cnblogs.com/moonz-wu/archive/2012/01/15/2322120.html

除錯技術與開發技術構成了軟體開發的基石。目前Nodejs作為新型的Web Server開發棧倍受開發者關注。總的來說Nodejs的應用程式主要有兩部分:JavaScript編寫的js模組和C語言編譯的二進位制模組。這裡主要介紹三種avaScript模組的除錯方法:基於Nodejs內建的偵錯程式,基於V8除錯外掛和基於Chrome瀏覽器的偵錯程式。以下所有的操作都將基於如下程式碼(example.js):

複製程式碼
var http = require('http');
var
url = require('url');
http.createServer(function (req, res) {
var path = url.parse(req.url).pathname;
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end(path);
}).listen(1337, "127.0.0.1");
console.log('Server running at http://127.0.0.1:1337/');
複製程式碼

1. 基於Nodejs內建的偵錯程式

Nodejs提供了一個內建偵錯程式來幫助開發者除錯應用程式。想要開啟偵錯程式我們需要在程式碼中加入debugger標籤,當Nodejs執行到debugger標籤時會自動暫停(debugger標籤相當於在程式碼中開啟一個斷點)。程式碼如下:

var path = url.parse(req.url).pathname;
debugger;
res.writeHead(200, {'Content-Type': 'text/plain'});

執行命令:node debug example.js 就可以進入除錯模式。

在debug模式下,可以使用內建命令如repl去評估變數和表示式的值(如2所示)。我們也可以通過help命令來獲取完整的除錯命令列表。

Commands: run (r), cont (c), next (n), step (s), out (o), backtrace (bt), setBreakpoint (sb), clearBreakpoint (cb),
watch, unwatch, watchers, repl, restart, kill, list, scripts, breakpoints, version

2. 基於V8外掛的偵錯程式
Nodejs是基於google V8的引擎上構建的,Google為Eclipse提供了一個對應的除錯外掛。關於如何在Eclipse中安裝和除錯Nodejs程式就不再重複描述了,網上已經有很多的文章了(具體可以參考這篇文章http://cnodejs.org/blog/?p=911)。唯一要注意的是在預設情況下V8引擎支援的除錯模式是本地模式。如果想要開啟遠端除錯的話,我們需要修改Nodejs中的V8原始檔:/deps/v8/src/platform-posix.cc

  addr.sin_family = AF_INET;
addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK); --> INADDR_ANY
addr.sin_port = htons(port);

然後重新編譯Nodejs。

提示:

用外掛來除錯nodejs程式,你有時候會遇到什麼connect refuse, get version failed等等錯誤。那麼請注意你使用的ip的地址, 一般下127.0.0.1的迴環地址是都工作的。如果你使用真實的ip地址,請檢查防火牆設定。

3. 基於Chrome瀏覽器的偵錯程式

既然我們可以通過V8的除錯外掛來除錯,那是否也可以借用Chrome瀏覽器的JavaScript偵錯程式來除錯呢?node-inspector模組提供了這樣一種可能。我們需要先通過npm來安裝node-inspector

npm install -g node-inspector  // -g 匯入安裝路徑到環境變數

node-inspector是通過websocket方式來轉向debug輸入輸出的。因此,我們在除錯前要先啟動node-inspector來監聽Nodejs的debug除錯埠。

預設情況下node-inspector的埠是8080,可以通過引數--web-port=[port]來設定埠。在啟動node-inpspector之後,我們可以通過--debug或--debug-brk來啟動nodejs程式。通過在瀏覽器輸入http://[ip address]:8080/debug?port=5858,我們會得到如下的除錯視窗:

 這三種方法各自有優缺點,我個人比較欣賞node-inspector的方式。