談到node斷點調試,目前主要有三種方式,經過node內置調試工具
、經過IDE(如vscode)
、經過node-inspector
,三者本質上差很少。本文着重點在於介紹 如何在本地經過node-inspector 調試遠程服務器上的node代碼。html
在進入主題以前,首先會對三種調試方式進行入門講解,方便新手理解後面的內容。至於老司機們,能夠直接跳到主題去。node
node debug app.js
好比要在第3行斷點。git
方式一:經過debugger
web
方式二:經過sb(line)
。chrome
經過next
命令。shell
經過cont
命令。npm
輸入repl
命令後,再次輸入變量名,就能夠看到變量對應的值。若是想繼續執行代碼,能夠按ctrl+c
退出。api
經過watch(expr)
來添加監視對象。瀏覽器
經過watchers
查看當前全部的監視對象。安全
經過unwatch(expr)
來刪除監視對象。
添加watch:
刪除watch:
進入函數:經過step
或者s
。
跳出函數:經過out
或者o
。
示例代碼以下,假設代碼運行到logger(str);
這一行,首先跳進函數內部,再跳出函數。
var nick = 'chyingp'; var country = 'China'; var str = nick + ' live in ' + country; var logger = function(msg){ console.log(msg); // 這裏 console.log('這行會跳過'); // 跳過這行 }; logger(str); // 假設運行到這裏,想要進入logger方法 console.log(str);
示例截圖以下:
經過setBreakpoint('script.js', 1), sb(...)
,在某個文件某一行添加斷點。反正我是沒成功過。。。怎麼看都是bug。。。
每次都退出而後node debug app.js
至關煩。直接用restart
好比遠程機器ip是192.168.1.126
,在遠程機器上進入調試模式
[root@localhost ex]# node --debug-brk app.js Debugger listening on port 5858
而後,在本地機器經過node debug 192.168.1.126:5858
鏈接遠程機器進行調試。
node debug 192.168.1.126:5858
以下:
➜ /tmp node debug 192.168.1.126:5858 connecting to 192.168.1.126:5858 ... ok break in /tmp/ex/app.js:1 > 1 var Logger = require('./logger'); 2 3 Logger.info('hello'); debug> n break in /tmp/ex/app.js:3 1 var Logger = require('./logger'); 2 > 3 Logger.info('hello'); 4 5 });
固然,還能夠經過pid進行遠程調試,這裏就不舉例。
參考:https://nodejs.org/api/debugg...
首先,在vscode裏打開項目
而後,添加調試配置。主要須要修改的是可執行文件的路徑。
點擊代碼左側添加斷點。
開始調試
順利斷點,左側的變量、監視對象,右側的調試工具欄,用過chrome dev tool
的同窗應該很熟悉,不贅述。
首先,安裝node-inspector
。
npm install -g node-inspector
node-debug
啓動調試啓動調試,它會自動幫你在瀏覽器裏打開調試界面。
➜ debugger git:(master) ✗ node-debug app.js Node Inspector v0.12.8 Visit http://127.0.0.1:8080/?port=5858 to start debugging. Debugging `app.js` Debugger listening on port 5858
調試界面以下,簡直不能更親切。
步驟1:經過node-inspector
啓動Node Inspector Server
➜ debugger git:(master) ✗ node-inspector Node Inspector v0.12.8 Visit http://127.0.0.1:8080/?port=5858 to start debugging.
步驟2:經過傳統方式啓動調試。加入--debug-brk
,好讓代碼在第一行斷住。
➜ debugger git:(master) ✗ node --debug-brk app.js Debugger listening on port 5858
步驟3:在瀏覽器裏打開調試UI界面。就是步驟1裏打印出來的地址 http://127.0.0.1:8080/?port=5858。成功
從上面的例子不難猜測到。(不負責任猜測)
經過node --debug-brk
啓動調試,監聽5858
端口。
node-inspector
啓動服務,監聽8080端口。
在瀏覽器裏訪問http://127.0.0.1:8080/?port=5858
。能夠看到port=5858
這個參數。結合以前講到的node內置遠程調試的功能,能夠猜測,在返回UI調試界面的同時,服務內部經過5858
端口開始了斷點調試。
另外,從下面截圖能夠看出,UI調試工具(實際上是個網頁)跟 inspector服務
之間經過websocket
進行通訊。
用戶在界面上操做時,好比設置斷點,就向 inspector服務
發送一條消息,inspector服務
在內部經過v8調試器來實現代碼的斷點。
能夠看到,用到了v8-debug
,這個就待深挖了。
細心的同窗可能會發現,node遠程調試其實在上面node-inspector
章節的講解裏已經覆蓋到了。這裏仍是來個實際的例子。
假設咱們的node代碼app.js
運行在阿里雲的服務器上,服務器ip是xxx.xxx.xxx.xxx
。
首先,服務器上啓動node-inspector服務
[root@iZ94wb7tioqZ ~]# node-inspector Node Inspector v0.12.8 Visit http://127.0.0.1:8080/?port=5858 to start debugging.
其次,經過--debug-brk
參數,進入調試模式
[root@iZ94wb7tioqZ ex]# node --debug-brk app.js Debugger listening on port 5858
最後,在本地經過ip地址愉快的訪問調試界面。是否是很簡單捏。
遠程調試常見的問題就是請求被拒絕。這是服務器安全策略的限制。遇到這種狀況,開放端口就完事了。
在咱們的雲主機上,默認安裝了firewall-cmd
,能夠經過--add-port
選項來開放8080
端口的開放。若是本機沒有安裝firewall-cmd
,也能夠經過iptables
來實現一樣的功能。
[root@iZ94wb7tioqZ ex]# firewall-cmd --add-port=8080/tcp success
而後,就能夠愉快的遠程調試了。