在線調(diào)試是云函數(shù)為了解決用戶在本地搭建調(diào)試環(huán)境復雜,云上環(huán)境不便于定位等問題推出的功能。
云上的各種服務,在本地無法完全模擬,程序員大都遇到過本地和遠程環(huán)境運行結(jié)果不一致的情形,追查起來費時費力,不僅效率低下,也造成非常郁悶的工作體驗。
所以,能否直接在遠程環(huán)境中完成全部的開發(fā)流程,是提升開發(fā)體驗的最直接手段,然而在其他問題都解決后,遠程調(diào)試功能是最后的一公里。
本篇文章將以一段內(nèi)存泄漏的代碼為例,給大家展示如何使用云函數(shù)在線調(diào)試功能定位和解決問題。Node10及以上版本的runtime,使用Chrome瀏覽器打開云函數(shù)控制臺,在函數(shù)代碼頁即可看到在線調(diào)試的入口。
開啟調(diào)試模式
使用Chrome瀏覽器打開函數(shù)代碼編輯頁,可以看到在【遠程調(diào)試】頁。為保障調(diào)試的體驗,開啟調(diào)試模式將修改函數(shù)的部分配置,包括函數(shù)進入單實例模式、函數(shù)超時時間修改為900秒等。開啟前請務必確認這些調(diào)整。
待加載完成后,頁面將自動展示入口文件。
找不到需要的文件?
使用快捷鍵Cmd+P(Mac)或Ctrl+P(Windows)可以打開所需要的文件。但大家可能會發(fā)現(xiàn),剛開啟調(diào)試模式時,打開文件的列表中找不到所需要的文件。這是因為對于動態(tài)腳本語言來說,調(diào)試器不會加載所有的內(nèi)容,只會加載執(zhí)行過的文件。我們先點擊測試,讓函數(shù)運行一次。在運行一次后,我們就可以打開所需要的文件了。
設(shè)置斷點
在代碼前點擊即可設(shè)置斷點,在右上角的工具中可以進行繼續(xù)執(zhí)行、跨步執(zhí)行、單步執(zhí)行等操作,也可以靈活地啟動或禁用斷點。
內(nèi)存泄漏排查-內(nèi)存快照
這部分介紹如何使用內(nèi)存快照功能排查內(nèi)存泄漏的問題。內(nèi)存泄漏的排查方法大致為:找準內(nèi)存泄漏的時機,在泄漏的前后對內(nèi)存進行快照,通過對比快照的內(nèi)容判斷內(nèi)存泄漏的問題點。
首先,我們將調(diào)試的窗口切換到Memory頁面,點擊左上方的實心圓形按鈕捕捉內(nèi)存快照。
這樣,我們就有了運行前的內(nèi)存快照?,F(xiàn)在我們執(zhí)行存在內(nèi)存泄漏的代碼。這行代碼有一個從未清理的全局緩存,隨著調(diào)用的增加,越來越占內(nèi)存。
隨后,我們進行第二次內(nèi)存快照,打開對比頁面,通過對Delta值的分析,可以發(fā)現(xiàn)concatenated string這個部分增加了很多,很有可能有問題。
打開以后,便可以發(fā)現(xiàn)內(nèi)存中多存儲了很多“recording time”的數(shù)據(jù)。
這些重復性的數(shù)據(jù)也就意味著代碼中出現(xiàn)了內(nèi)存泄漏,在代碼中找到相關(guān)內(nèi)容,進行調(diào)整,解決內(nèi)存泄漏的問題。
除了云函數(shù)的控制臺,也可以使用Serverless Framework Dev模式開啟在線調(diào)試的功能。