electron软件奔溃捕获

electron开发的软件,捕获软件异常,对出错原因进行记录或者进行其他逻辑操作。

创建BrowserWindow后,添加如下代码

  mainWin.webContents.on("crashed", async (e, killed) => {
    let result = await dialog.showMessageBox({
      type: "error",
      title: "应用程序崩溃",
      message: "当前程序发生异常,是否要重新加载应用程序?",
      buttons: ["是", "否"],
    })
    if (result.response == 0){
      mainWin.webContents.reload()
    } else {
      app.quit()
      console.log('系统奔溃,可在此进行日志收集,将奔溃原因写入日志文件')
    }
  })

请添加图片描述
或者


app.on('render-process-gone', async (e, w, d) => {
  const _path ='/home/logs/error.log'
  if (!fs.existsSync(_path)) {
    fs.writeFileSync(_path, `[${getFormatDate('-', '', '-', '_')}] 系统出错日志
    ·clean-exit - 以零为退出代码退出的进程
    ·abnormal-exit - 以非零退出代码退出的进程
    ·killed - 进程发送一个SIGTERM,否则是被外部杀死的。
    ·crashed - 进程崩溃
    ·oom - 进程内存不足
    ·launch-failed - 进程从未成功启动
    ·integrity-failure - 窗口代码完整性检查失败
    \n`, { encoding: 'utf-8' })
  }
  if(d.reason == "crashed" || d.reason == "oom") { // 进程崩溃 / 进程内存不足
    let result = await dialog.showMessageBox({
      type: "error",
      title: "应用程序崩溃",
      message: "当前程序发生异常,是否要重新加载应用程序?",
      buttons: ["是", "否"],
    })
    const msg = `[${new Date()}] 渲染进程被杀死${d.reason}`
    if (result.response == 0){
     fs.appendFileSync(_path, `${msg}重新加载软件\n`)
      mainWin.webContents.reload()
    } else {
    	 fs.appendFileSync(_path, `${msg}\n`)
    	app.quit()
    }
  } else {
    fs.appendFileSync(_path, `[${new Date()}] 渲染进程被杀死${d.reason}\n`)
  }
})
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值