調(diào)試Node.js程序的方法是什么-創(chuàng)新互聯(lián)

這篇文章給大家分享的是有關(guān)調(diào)試Node.js程序的方法是什么的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考。一起跟隨小編過來看看吧。

創(chuàng)新互聯(lián)自2013年創(chuàng)立以來,公司以網(wǎng)站設(shè)計(jì)制作、網(wǎng)站設(shè)計(jì)、系統(tǒng)開發(fā)、網(wǎng)絡(luò)推廣、文化傳媒、企業(yè)宣傳、平面廣告設(shè)計(jì)等為主要業(yè)務(wù),適用行業(yè)近百種。服務(wù)企業(yè)客戶數(shù)千家,涉及國內(nèi)多個(gè)省份客戶。擁有多年網(wǎng)站建設(shè)開發(fā)經(jīng)驗(yàn)。為企業(yè)提供專業(yè)的網(wǎng)站建設(shè)、創(chuàng)意設(shè)計(jì)、宣傳推廣等服務(wù)。 通過專業(yè)的設(shè)計(jì)、獨(dú)特的風(fēng)格,為不同客戶提供各種風(fēng)格的特色服務(wù)。

在調(diào)試程序時(shí)總是會(huì)遇到各種挑戰(zhàn)。 Node.js 的異步工作流為這一艱巨的過程增加了額外的復(fù)雜性。盡管 V8 引擎為了方便訪問異步棧跟蹤進(jìn)行了一些更新,但是在很多數(shù)情況下,我們只會(huì)在程序主線程上遇到錯(cuò)誤,這使得調(diào)試有些困難。同樣,當(dāng)我們的 Node.js 程序崩潰時(shí),通常需要依靠一些復(fù)雜的 CLI 工具來分析核心轉(zhuǎn)儲(chǔ)。

日志記錄

當(dāng)然,沒有哪一個(gè)開發(fā)工具箱是不提供日志的。我們傾向于在本地開發(fā)中的整個(gè)代碼中放置 console.log 語句,但這并不是生產(chǎn)中真正可擴(kuò)展的策略。你可能需要進(jìn)行一些過濾和清理,或者實(shí)施一致的日志記錄策略,以便從中識(shí)別出重要的信息。

要實(shí)施適當(dāng)?shù)拿嫦蛉罩镜恼{(diào)試策略,可以用 Pino或 Winston 之類的日志記錄工具。這些將允許你設(shè)置日志級(jí)別(INFO、 WARN、ERROR),它們?cè)试S你在本地打印詳細(xì)的日志消息,同時(shí)在生產(chǎn)環(huán)境下僅打印嚴(yán)重的日志消息。你還可以將這些日志流式傳輸?shù)骄酆掀骰蚱渌胤剑?LogStash,Papertrail 甚至 Slack。

使用 Node Inspect 和 Chrome DevTools

日志記錄只能使我們了解程序?yàn)楹螣o法按預(yù)期運(yùn)行。對(duì)于復(fù)雜的調(diào)試,我們將希望使用斷點(diǎn)來檢查代碼在執(zhí)行時(shí)的行為。

為此,可以使用 Node Inspect。 Node Inspect 是 Node.js 附帶的調(diào)試工具。它實(shí)際上只是程序的 Chrome DevTools 的實(shí)現(xiàn),可讓你添加斷點(diǎn)、控制分步執(zhí)行、查看變量、并遵循調(diào)用堆棧。

有兩種方法啟動(dòng) Node Inspect,但最簡單的方法可能就是使用 --inspect-brk 標(biāo)志來調(diào)用 Node.js 應(yīng)用程序:

$ node --inspect-brk $your_script_name

調(diào)試Node.js程序的方法是什么

啟動(dòng)程序后,前往 Chrome 瀏覽器中的 chrome://inspect URL 進(jìn)入 Chrome DevTools。借助 Chrome DevTools,你可以擁有在瀏覽器中調(diào)試 JavaScript 時(shí)的所有功能。最有用的功能是檢查內(nèi)存的能力。你可以獲取堆快照并配置內(nèi)存使用情況,以了解內(nèi)存的分配方式以及可能的方式及內(nèi)存泄漏的情況。

使用受支持的IDE

許多現(xiàn)代 IDE 不但能夠以某種方式啟動(dòng)程序,而且還支持調(diào)試 Node 程序。除了具有 Chrome DevTools 中的許多功能外,它們還具有自己的功能,例如可以創(chuàng)建日志點(diǎn)并允許你創(chuàng)建多個(gè)調(diào)試配置文件??梢酝ㄟ^查閱有關(guān)檢查器客戶端的 Node.js 指南來獲取有關(guān)這些 IDE 的更多信息。

使用NDB

調(diào)試Node.js程序的方法是什么

另一種選擇是安裝 ndb,它是 Node.js 的獨(dú)立調(diào)試器,和瀏覽器中的 DevTools 類似,就像一個(gè)隔離的本地調(diào)試器一樣。它還有一些在 DevTools 中不可用的額外功能。它支持本地編輯,這意味著你可以修改代碼并得到調(diào)試器平臺(tái)直接支持的更新邏輯。這對(duì)于進(jìn)行快速迭代非常有用。w

事后調(diào)試

假設(shè)你的程序由于災(zāi)難性錯(cuò)誤(例如內(nèi)存訪問錯(cuò)誤)而崩潰。這些可能很少見,但確實(shí)會(huì)發(fā)生,特別是如果你的應(yīng)用程序依賴于本機(jī)代碼。

要調(diào)查這類問題,可以使用 llnode。當(dāng)程序崩潰時(shí),llnode 可以通過將 JavaScript 堆??蚣芎蛯?duì)象映射到 C/C++ 端的對(duì)象來檢查它們。為了使用它,你首先需要程序的核心轉(zhuǎn)儲(chǔ)。為此你需要使用 process.abort 而不是process.exit 來關(guān)閉代碼中的進(jìn)程。當(dāng)你使用 process.abort 時(shí),Node 進(jìn)程在退出時(shí)會(huì)生成一個(gè)核心轉(zhuǎn)儲(chǔ)文件。

為了更好地理解 llnode 可以提供的功能,這個(gè)視頻演示了其一些功能。

有用的 Node 模塊

除了上述所有以外,還建議用第三方軟件包做進(jìn)一步調(diào)試。

debug

第一個(gè)被簡單地稱為 debug。使用 debug,你可以基于函數(shù)名或整個(gè)模塊為日志消息分配特定的命名空間。然后可以通過特定的環(huán)境變量選擇將哪些消息打印到控制臺(tái)。

例如,這是一個(gè) Node.js 服務(wù)器,它正在記錄來自整個(gè)程序和中間件棧的幾條消息,例如 sequelize,express:applicationexpress:router

調(diào)試Node.js程序的方法是什么

如果我們將 DEBUG 環(huán)境變量設(shè)置為 express:router 并啟動(dòng)相同的程序,則僅顯示標(biāo)記為 express:router 的消息:

調(diào)試Node.js程序的方法是什么

通過以這種方式過濾消息,可以深入研究程序單個(gè)部分的行為方式,而無需大幅度更改代碼的日志記錄。

trace  與 clarify

trace 和 clarify 兩個(gè)模塊最好在一起配合使用。

trace 通過提供有關(guān)被調(diào)用的異步方法的更多詳細(xì)信息來擴(kuò)展你的異步棧跟蹤,這是 Node.js 默認(rèn)不提供的路線圖。 clarify 通過從特定于 Node.js 內(nèi)部的棧跟蹤中刪除所有信息來提供幫助。這使你可以專注于僅針對(duì)程序的函數(shù)調(diào)用。

這些模塊都不建議在生產(chǎn)環(huán)境中運(yùn)行!僅在本地開發(fā)環(huán)境中進(jìn)行調(diào)試時(shí)才應(yīng)啟用它們。

感謝各位的閱讀!關(guān)于調(diào)試Node.js程序的方法是什么就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

當(dāng)前名稱:調(diào)試Node.js程序的方法是什么-創(chuàng)新互聯(lián)
鏈接URL:http://www.muchs.cn/article38/dpcjpp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)、建站公司企業(yè)建站、手機(jī)網(wǎng)站建設(shè)、面包屑導(dǎo)航、品牌網(wǎng)站設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都app開發(fā)公司