Electron的 crashReporter 模块用于帮助开发者收集并报告应用程序崩溃的信息。这对于识别和解决在发 布后的应用中可能出现的问题非常有用。Electron的 crashReporter 是基于 Chromium的崩溃报告系统构 建的,允许开发者收集崩溃日志,并将它们发送到自己的服务器,或者发送到Electron的崩溃报告服务(如 果开发者选择这样做的话,尽管这通常不是首选,因为隐私和安全性的考虑)。 另外还需要记录其他崩溃错误信息,写入日志文件中。
Electron的 crashReporter
mac上崩溃日志的文件路径:/Users/caiyunsun/Library/Application Support/ee/Crashpad/completed/5856f335-ec64-47b9-bdda-ff004bd8f2cd.dmp
需要处理的事件有render-process-gone 和 child-process-gone 。其他几个已废弃。
另外还需要监控进程: uncaughtException 和 unhandledRejection。
核心代码如下
const { app: electronApp, crashReporter, dialog } = require("electron");
crashReporterLog() {
// 获取奔溃堆栈文件存放路径
let crashDumpsDir = "";
const self = this;
try {
// electron 高版本
crashDumpsDir = electronApp.getPath("crashDumps");
console.log("————————crashDumpsDir:", crashDumpsDir);
} catch (e) {
console.error("获取奔溃文件路径失败", e);
}
// 开启crash捕获 官方建议写在app.on('ready')前
crashReporter.start({
productName: "ee",
companyName: "ee",
submitURL: "", // 上传到服务器的地址
uploadToServer: false, // 不上传服务器
ignoreSystemCrashHandler: false, // 不忽略系统自带的奔溃处理,为 true 时表示忽略,奔溃时不会生成奔溃堆栈文件
extra: {
timestamp: dayjs().format("YYYY-MM-DD HH:mm:ss"),
},
});
// 监听崩溃事件
electronApp.on(
"render-process-gone",
async (event, webContents, details) => {
console.warn(
"————————app:render-process-gone",
event,
webContents,
details
);
);
electronApp.on("child-process-gone", (event, details) => {
console.warn("————————app:child-process-gone", event, details);
});
process.on("uncaughtException", (error) => {
console.error("主进程 - 未捕获的异常:", error);
});
process.on("unhandledRejection", (reason, promise) => {
console.error("主进程 - 未处理的Promise拒绝:", reason);
});
}