您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關調試Node.js程序的方法是什么的內容。小編覺得挺實用的,因此分享給大家做個參考。一起跟隨小編過來看看吧。
在調試程序時總是會遇到各種挑戰。 Node.js 的異步工作流為這一艱巨的過程增加了額外的復雜性。盡管 V8 引擎為了方便訪問異步棧跟蹤進行了一些更新,但是在很多數情況下,我們只會在程序主線程上遇到錯誤,這使得調試有些困難。同樣,當我們的 Node.js 程序崩潰時,通常需要依靠一些復雜的 CLI 工具來分析核心轉儲。
當然,沒有哪一個開發工具箱是不提供日志的。我們傾向于在本地開發中的整個代碼中放置 console.log
語句,但這并不是生產中真正可擴展的策略。你可能需要進行一些過濾和清理,或者實施一致的日志記錄策略,以便從中識別出重要的信息。
要實施適當的面向日志的調試策略,可以用 Pino或 Winston 之類的日志記錄工具。這些將允許你設置日志級別(INFO
、 WARN
、ERROR
),它們允許你在本地打印詳細的日志消息,同時在生產環境下僅打印嚴重的日志消息。你還可以將這些日志流式傳輸到聚合器或其他地方,例如 LogStash,Papertrail 甚至 Slack。
日志記錄只能使我們了解程序為何無法按預期運行。對于復雜的調試,我們將希望使用斷點來檢查代碼在執行時的行為。
為此,可以使用 Node Inspect。 Node Inspect 是 Node.js 附帶的調試工具。它實際上只是程序的 Chrome DevTools 的實現,可讓你添加斷點、控制分步執行、查看變量、并遵循調用堆棧。
有兩種方法啟動 Node Inspect,但最簡單的方法可能就是使用 --inspect-brk
標志來調用 Node.js 應用程序:
$ node --inspect-brk $your_script_name
啟動程序后,前往 Chrome 瀏覽器中的 chrome://inspect
URL 進入 Chrome DevTools。借助 Chrome DevTools,你可以擁有在瀏覽器中調試 JavaScript 時的所有功能。最有用的功能是檢查內存的能力。你可以獲取堆快照并配置內存使用情況,以了解內存的分配方式以及可能的方式及內存泄漏的情況。
許多現代 IDE 不但能夠以某種方式啟動程序,而且還支持調試 Node 程序。除了具有 Chrome DevTools 中的許多功能外,它們還具有自己的功能,例如可以創建日志點并允許你創建多個調試配置文件。可以通過查閱有關檢查器客戶端的 Node.js 指南來獲取有關這些 IDE 的更多信息。
另一種選擇是安裝 ndb,它是 Node.js 的獨立調試器,和瀏覽器中的 DevTools 類似,就像一個隔離的本地調試器一樣。它還有一些在 DevTools 中不可用的額外功能。它支持本地編輯,這意味著你可以修改代碼并得到調試器平臺直接支持的更新邏輯。這對于進行快速迭代非常有用。w
假設你的程序由于災難性錯誤(例如內存訪問錯誤)而崩潰。這些可能很少見,但確實會發生,特別是如果你的應用程序依賴于本機代碼。
要調查這類問題,可以使用 llnode。當程序崩潰時,llnode
可以通過將 JavaScript 堆棧框架和對象映射到 C/C++ 端的對象來檢查它們。為了使用它,你首先需要程序的核心轉儲。為此你需要使用 process.abort
而不是process.exit
來關閉代碼中的進程。當你使用 process.abort
時,Node 進程在退出時會生成一個核心轉儲文件。
為了更好地理解 llnode
可以提供的功能,這個視頻演示了其一些功能。
除了上述所有以外,還建議用第三方軟件包做進一步調試。
第一個被簡單地稱為 debug。使用 debug,你可以基于函數名或整個模塊為日志消息分配特定的命名空間。然后可以通過特定的環境變量選擇將哪些消息打印到控制臺。
例如,這是一個 Node.js 服務器,它正在記錄來自整個程序和中間件棧的幾條消息,例如 sequelize
,express:application
和 express:router
:
如果我們將 DEBUG 環境變量設置為 express:router
并啟動相同的程序,則僅顯示標記為 express:router
的消息:
通過以這種方式過濾消息,可以深入研究程序單個部分的行為方式,而無需大幅度更改代碼的日志記錄。
trace 和 clarify 兩個模塊最好在一起配合使用。
trace
通過提供有關被調用的異步方法的更多詳細信息來擴展你的異步棧跟蹤,這是 Node.js 默認不提供的路線圖。 clarify
通過從特定于 Node.js 內部的棧跟蹤中刪除所有信息來提供幫助。這使你可以專注于僅針對程序的函數調用。
這些模塊都不建議在生產環境中運行!僅在本地開發環境中進行調試時才應啟用它們。
感謝各位的閱讀!關于調試Node.js程序的方法是什么就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。