Chinese (Traditional) (中文(繁體)) translation by Stypstive (you can also view the original English article)
我感覺調試是開發週期中至關重要的一環。 所以,搞清楚調試任務,讓它容易一些、耗時少一些,讓我們準時完成工作並減少壓力,總歸是一種良好的實踐。
和大多數其它主流語言一樣,Node也提供了一些優秀的調試工具,讓我們可以容易地找到和修復代碼中的缺陷。 我總是不遺餘力地推薦使用調試器,因為個人而言,我發現調試器真的可以消除任何黑箱猜測,並且一般來說會讓我們開發者得到提升。
這個指南針對的是已經開始使用Node的開發者和管理員。 我假設這部分讀者對這個語言的理解已經到了實用的程度。
使用調試器
Node.js包含了一個全功能的進程外調試工具和一個內置的調試客戶端,可用一個簡單的基於TCP的協議來訪問。
比如,使用這個調試器調試一個名為script.js
的文件,你只需要用debug
標記來調用node,即:
$ node debug script.js < debugger listening on port 5858 connecting... ok debug>
斷點
現在你啟動了一個調試會話,而在腳本中任何調用了debugger
的位置就將成為調試器的一個斷點。
讓我們可script.js中添加一個調試語句:
foo = 2; setTimeout(() => { debugger; console.log('bugger'); }, 1000); console.log('de');
現在,如果我們執行此腳本,則調試器會調用我們的斷點,然後,我們可以用過cont
或next
命令 (縮寫為c
或n
)來控制腳本運行。
我們可以在任何時候通過p
來暫停腳本的執行。
$ node debug script.js < debugger listening on port 5858 connecting... ok break in /home/tom/web/envatodebug/myscript.js:1 1 foo = 5; 2 setTimeout(() => { 3 debugger; debug> cont < de break in /home/tom/web/envatodebug/myscript.js:3 1 foo = 5; 2 setTimeout(() => { 3 debugger; 4 console.log('bugger'); 5 }, 1000); debug> next break in /home/tom/web/envatodebug/myscript.js:4 2 setTimeout(() => { 3 debugger; 4 console.log('bugger'); 5 }, 1000); 6 console.log('de'); debug> next < bugger break in /home/tom/web/envatodebug/myscript.js:5 3 debugger; 4 console.log('bugger'); 5 }, 1000); 6 console.log('de'); 7 debug> quit
REPL
$ node debug script.js < debugger listening on port 5858 connecting... ok debug> repl Press Ctrl + C to leave debug repl > foo 2 > 2+2 4
調試器的讀取-執行-打印-循環 (REPL) 讓你可以在執行過程中交互式地輸入代碼,因而可訪問到應用程序的狀態,中斷處所有的變量和方法。 這是一種很強大的工具,讓你可以快速地改良你的代碼。
一般而言,REPL是調試器的一部分,但它也獨立存在的,你可以交互式地用它來執行JavaScript代碼。 比如,在命令行中不帶任何選項地執行node
,你就會得到一個REPL界面,然後你可以在它裡面寫代碼並看到輸出。
步入和步出
前面我提到了cont
和next
命令 (c
和n
),它們可用於到達斷點後代碼的繼續執行。 除此之外,在我們遍歷代碼時,我們也可以步入一個方法,或步出到它的父作用域中。
使用step
來步入,使用out
來步出,或用簡寫s
和o
代替。
反射追踪
使用backtrace
或bt
來打印當前執行幀的反向追踪輸出。
重啟
使用restart
或r
來重啟腳本,讓它從頭開始執行。
控制調試器的其它方式
高級用戶也可用--debug
命令行參數啟動Node.js來訪問調試器,或者向已經運行的Node.js進程發送一個SIGUSR1
信號。
一旦一個進程用這種方法進入了調試模式,我們可以用Node.js調試器來連接它,訪問監聽狀態的調試器的方式可以是運行進程的pid
,也可以是URL地址 (比如localhost:port
)
-
node debug -p
是通過pid
來訪問進程。 - 而
node debug<URI>
是用過URL來連接進程,比如localhost:5858
。
使用Node Inspector
除了命令行 (CLI) 調試工具,Node Inspector也提供了網頁瀏覽器內部的GUI調試器。
為使用這種調試器,只需要用如下方式安裝:
npm install -g node-inspector
現在,你已經安裝了Node Inspector,我們可用如下方式調試script.js:
node-debug script.js
你的命令行會輸出如下信息,如果你的Chrome或Opera瀏覽器是你操作系統上的默認瀏覽器,則同時也會用瀏覽器打開一個相應的URL地址。
Node Inspector is now available from https://127.0.0.1:8080/?ws=127.0.0.1:8080&port=5858 Debugging `script.js` Debugger listening on port 5858
在你的網頁瀏覽器中,你將可以在和開發者工具包類似的環境中調試你的應用程序。 設置斷點和查看代碼在你的瀏覽器視圖中集成起來了。 盡情享受吧!
結論
調試並不一定是一個噩夢,也不一定充滿壓力。
設置斷點和逐步執行代碼在Node也能如此簡單。 這和Ruby有著相同的使用體驗。如果你想理解某個應用程序,用調試模式打開並暫停執行酷炫極了,可讓你以極快的速度學習。
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Update me weeklyEnvato Tuts+ tutorials are translated into other languages by our community members—you can be involved too!
Translate this post