使用 google_breakpad 分析 Electron 崩潰日誌檔案

程式設計三昧 發表於 2022-01-18

google_breakpad.001.jpeg

前置資訊

本機(MacBook Pro)上 Electron 的路徑:/usr/local/lib/node_modules/electron/dist/Electron.app/Contents/MacOS/Electron

本機 Electron 資料檔案路徑:/Users/bianchengsanmei/Library/Application Support/Electron

本地 dump_sysm 路徑:/Users/bianchengsanmei/Library/Developer/Xcode/DerivedData/Breakpad-ebqwamwdejfpicartmwratdgdbnc/Build/Products/Release/dump_syms

minidumps_stackwalk 路徑 /Users/bianchengsanmei/Public/CODE/google_breakpad/breakpad/src/processor/minidump_stackwalk

構建 google_breakpad

  1. 下載 google_breakpad 原始碼;
     git clone https://github.com/google/breakpad.git
  2. 編譯 google_breakpad
     ./configure && make
  3. 安裝構建的庫
     make install

生成 Electron 崩潰日誌

// main.js
import { app, crashReporter } from "electron";
import * as path from "path";
crashReporter.start({
    uploadToServer: false
});
app.setPath("crashDumps", process.cwd() + "/crash");

這樣當渲染程式崩潰後,我們可在安裝目錄下的 crash 資料夾下找到一份 dump 檔案,這就是崩潰日誌檔案。

需要注意,在 [email protected] 中,是沒有 crashDumps 路徑的,統一存在 temp 路徑下。

解析 dump 檔案

直接開啟檢視 dump 檔案,為 16 進位制資料:

image.png
需要把該檔案轉換為可讀、可分析的檔案,使用工具為 google_breakpad 中的 minidumps_stackwalk:

$ /Users/bianchengsanmei/Public/CODE/google_breakpad/breakpad/src/processor/minidump_stackwalk ./crash/test.dump > ./crash/test.info

開啟檢視 test.info:

image.png
其中最需要注意的是 Crash reason ,是導致崩潰的原因描述。

學習有趣的知識,結識有趣的朋友,塑造有趣的靈魂!

大家好,我是〖程式設計三昧〗的作者 隱逸王,我的公眾號是『程式設計三昧』,歡迎關注,希望大家多多指教!

你來,懷揣期望,我有墨香相迎! 你歸,無論得失,唯以餘韻相贈!

知識與技能並重,內力和外功兼修,理論和實踐兩手都要抓、兩手都要硬!

本作品採用《CC 協議》,轉載必須註明作者和本文連結