在調(diào)試程序時總是會遇到各種挑戰(zhàn)。 Node.js 的異步工作流為這一艱巨的過程增加了額外的復雜性。盡管 V8 引擎為了方便訪問異步棧跟蹤進行了一些更新,但是在很多數(shù)情況下,我們只會在程序主線程上遇到錯誤,這使得調(diào)試有些困難。同樣,當我們的 Node.js 程序崩潰時,通常需要依靠一些復雜的 CLI 工具來分析核心轉儲。
雙江網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)建站!從網(wǎng)頁設計、網(wǎng)站建設、微信開發(fā)、APP開發(fā)、響應式網(wǎng)站建設等網(wǎng)站項目制作,到程序開發(fā),運營維護。創(chuàng)新互聯(lián)建站2013年開創(chuàng)至今到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設就選創(chuàng)新互聯(lián)建站。在本文中,我們將介紹一些調(diào)試 Node.js 程序的簡便方法?!疽曨l教程推薦:node js教程 】
日志記錄當然,沒有哪一個開發(fā)工具箱是不提供日志的。我們傾向于在本地開發(fā)中的整個代碼中放置 console.log
語句,但這并不是生產(chǎn)中真正可擴展的策略。你可能需要進行一些過濾和清理,或者實施一致的日志記錄策略,以便從中識別出重要的信息。
要實施適當?shù)拿嫦蛉罩镜恼{(diào)試策略,可以用 Pino或 Winston 之類的日志記錄工具。這些將允許你設置日志級別(INFO
、 WARN
、ERROR
),它們允許你在本地打印詳細的日志消息,同時在生產(chǎn)環(huán)境下僅打印嚴重的日志消息。你還可以將這些日志流式傳輸?shù)骄酆掀骰蚱渌胤剑?LogStash,Papertrail 甚至 Slack。
日志記錄只能使我們了解程序為何無法按預期運行。對于復雜的調(diào)試,我們將希望使用斷點來檢查代碼在執(zhí)行時的行為。
為此,可以使用 Node Inspect。 Node Inspect 是 Node.js 附帶的調(diào)試工具。它實際上只是程序的 Chrome DevTools 的實現(xiàn),可讓你添加斷點、控制分步執(zhí)行、查看變量、并遵循調(diào)用堆棧。
有兩種方法啟動 Node Inspect,但最簡單的方法可能就是使用 --inspect-brk
標志來調(diào)用 Node.js 應用程序:
$ node --inspect-brk $your_script_name
啟動程序后,前往 Chrome 瀏覽器中的 chrome://inspect
URL 進入 Chrome DevTools。借助 Chrome DevTools,你可以擁有在瀏覽器中調(diào)試 JavaScript 時的所有功能。最有用的功能是檢查內(nèi)存的能力。你可以獲取堆快照并配置內(nèi)存使用情況,以了解內(nèi)存的分配方式以及可能的方式及內(nèi)存泄漏的情況。
許多現(xiàn)代 IDE 不但能夠以某種方式啟動程序,而且還支持調(diào)試 Node 程序。除了具有 Chrome DevTools 中的許多功能外,它們還具有自己的功能,例如可以創(chuàng)建日志點并允許你創(chuàng)建多個調(diào)試配置文件??梢酝ㄟ^查閱有關檢查器客戶端的 Node.js 指南來獲取有關這些 IDE 的更多信息。
使用NDB另一種選擇是安裝 ndb,它是 Node.js 的獨立調(diào)試器,和瀏覽器中的 DevTools 類似,就像一個隔離的本地調(diào)試器一樣。它還有一些在 DevTools 中不可用的額外功能。它支持本地編輯,這意味著你可以修改代碼并得到調(diào)試器平臺直接支持的更新邏輯。這對于進行快速迭代非常有用。w
事后調(diào)試假設你的程序由于災難性錯誤(例如內(nèi)存訪問錯誤)而崩潰。這些可能很少見,但確實會發(fā)生,特別是如果你的應用程序依賴于本機代碼。
要調(diào)查這類問題,可以使用 llnode。當程序崩潰時,llnode
可以通過將 JavaScript 堆??蚣芎蛯ο笥成涞?C/C++ 端的對象來檢查它們。為了使用它,你首先需要程序的核心轉儲。為此你需要使用 process.abort
而不是process.exit
來關閉代碼中的進程。當你使用 process.abort
時,Node 進程在退出時會生成一個核心轉儲文件。
為了更好地理解 llnode
可以提供的功能,這個視頻演示了其一些功能。
除了上述所有以外,還建議用第三方軟件包做進一步調(diào)試。
debug第一個被簡單地稱為 debug。使用 debug,你可以基于函數(shù)名或整個模塊為日志消息分配特定的命名空間。然后可以通過特定的環(huán)境變量選擇將哪些消息打印到控制臺。
例如,這是一個 Node.js 服務器,它正在記錄來自整個程序和中間件棧的幾條消息,例如 sequelize
,express:application
和 express:router
:
如果我們將 DEBUG 環(huán)境變量設置為 express:router
并啟動相同的程序,則僅顯示標記為 express:router
的消息:
通過以這種方式過濾消息,可以深入研究程序單個部分的行為方式,而無需大幅度更改代碼的日志記錄。
trace 與 clarifytrace 和 clarify 兩個模塊最好在一起配合使用。
trace
通過提供有關被調(diào)用的異步方法的更多詳細信息來擴展你的異步棧跟蹤,這是 Node.js 默認不提供的路線圖。 clarify
通過從特定于 Node.js 內(nèi)部的棧跟蹤中刪除所有信息來提供幫助。這使你可以專注于僅針對程序的函數(shù)調(diào)用。
這些模塊都不建議在生產(chǎn)環(huán)境中運行!僅在本地開發(fā)環(huán)境中進行調(diào)試時才應啟用它們。
更多編程相關知識,可訪問:編程教學!!
當前題目:一些調(diào)試Node.js程序的快捷方法
標題網(wǎng)址:http://jinyejixie.com/article26/chohcg.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設計、外貿(mào)建站、商城網(wǎng)站、Google、微信公眾號、面包屑導航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)