node.js 閃退監控實踐
前言:
在使用 node-webkit 搭建的桌面應用中,有時候應用會由於一些原因發生閃退,因此我們需要監控閃退的情況,給使用者一個提示,達到更為人性化的目的。近期便實現了這樣一個需求,過程中遇到一些困惑和問題,特此記錄。
實現過程描述:
如果node-webkit應用崩潰,一個 minidump
檔案會被儲存到磁碟,用以除錯和尋找程式崩潰的原因。預設情況下,dump檔案儲存在系統的臨時資料夾中,我們也可以通過api來設定dump檔案的存放目錄。圖片來自官網:
從官網的描述上來看,我們的確能夠在系統的臨時目錄下找到生成的dmp檔案,檔名是以GUID生成的,類似下圖
但我們的怎麼判斷這個dmp檔案就是我們的應用程式崩潰之後產生的呢?如果僅僅根據檔名的形式來判斷顯然不靠譜,那還有其他的辦法嗎?於是我在官網又找尋了一番,看到一個方法,APP.setCrashDumpDir(dir)
這個方法可以讓我們自己設定dmp檔案的生成目錄,也就是我們只要檢測在我們設定的目錄下是否有dmp檔案便可以了,貌似可行,但是這個API從0.11版本以後就不再支援了,我使用的版本高於0.11,於是這個方法也行不通了,最後我們只有對生成的dmp檔案進行解析了,之前從未對這樣的檔案解析,因此解析檔案的過程也耗費了我點時間,不過最後結果還是令人欣慰的。話不多說,開始dmp檔案的解析。
dmp檔案不同於一般的文字檔案,這種檔案在windows系統下,必須使用 WinDbg 這個工具才能開啟,而且開啟之後還要進行解碼,解碼之後,檔案內部包含了應用程式的名稱,我們可以根據這個來判斷是否是我們的應用閃退之後生成的檔案。
那麼我們怎樣在不依賴外部工具的前提下,使用 node.js 對該檔案進行解析呢?這裡我們需要使用到 Buffer 類讀取二進位制檔案
這裡的buf數組裡面存放的就是檔案內容對應的二進位制資料,類似如下:
通過二進位制資料,我們便可以匹配出對應的應用程式名,從而確定該檔案是我們的程式閃退產生的。
總結:
在剛遇到這個問題時,沒有頭緒,不知道採用怎樣的方法,通過不斷嘗試,最終實現需求。敢於挑戰,敢於coding!共勉