Electron集成Sentry

@ sentry / electron是Electron应用程序的官方Sentry SDK。它可以捕获主进程和渲染器中的JavaScript异常,以及收集本机崩溃报告(Minidumps)。

const { init } = require('@sentry/electron');
init({
    dsn: 'https://<key>@sentry.io/<project>',
    enableNative: false,
});

一、向导

我们的Sentry向导可以帮助您完成设置过程。确保全局安装了@ sentry / wizard npm包,然后运行:

$ npm install -g @sentry/wizard
$ sentry-wizard --integration electron

 这将指导您完成安装和配置过程,并提供有用的开发工具。如果您更喜欢手动设置,请继续阅读。

二、客户端配置

配置SDK后,本机应用程序的Electron CrashReporter会崩溃并使用引擎盖下的JavaScript SDK捕获任何未捕获的JavaScript异常。确保在主进程中尽早调用此函数,并且所有渲染器进程也在启动期间捕获错误。

三、浏览器集成

我们建议将初始化放在单独的JavaScript模块中,以保持配置选项的一致性。这也允许在创建新的BrowserWindow实例时将其用作预加载脚本:

mainWindow = new BrowserWindow({
  width: 800,
  height: 600,
  webPreferences: {
    preload: path.join(__dirname, 'sentry.js')
  }
});

在此之后,SDK已准备好捕获在这些进程中发生的任何未捕获的异常和本机崩溃。

四、Node集成

SDK需要一些NodeJS API才能正常运行。在创建没有节点集成的窗口时,必须在预加载脚本中加载SDK,如上所述。这样做还可以确保尽早加载SDK。

mainWindow = new BrowserWindow({
  width: 800,
  height: 600,
  webPreferences: {
    nodeIntegration: false,
    preload: path.join(__dirname, 'sentry.js')
  }
});

 五、沙盒模式

沙箱模式使用特定于操作系统的方法将渲染器进程与操作系统完全隔离。由于大多数节点API需要系统访问,因此它们在沙箱模式下不可用,最值得注意的是require()。有关沙箱限制的详细说明,请参阅链接的文档。

仍可以在预加载脚本中使用Electron SDK。但是,由于缺少require()函数,需要使用Webpack或Rollup等捆绑器将其捆绑到单个文件中。有关所有可能的配置选项,请参阅所选工具的相应文档。

SDK的编写方式可以防止捆绑程序处理任何仅在主进程中执行的代码。唯一剩下的外部依赖是电子,必须明确排除在内联之外。对于Webpack,这将是:

module.exports = {
  externals: {
    electron: 'commonjs electron',
  },
  // ...
};

或者对于Rollup:

export default {
  external: ['electron'],
  plugins: [commonjs()],
  // ...
};

六、上传调试信息

要获取本机崩溃的符号化堆栈跟踪,您必须将调试符号上载到Sentry。 Sentry向导创建一个方便的sentry-symbols.js脚本,它将为您上传Electron符号。安装SDK后,每次升级Electron版本时,请运行以下脚本:

node sentry-symbols.js

 如果您的应用使用自定义电子分叉,包含具有本机扩展或产生子进程的模块,则必须使用Sentry CLI手动上载这些符号。有关更多信息,请参阅本机使用。

七、处理压缩的源代码

Electron SDK支持Source Maps。如果您上传源图,除了您的缩小文件,数据在Sentry中可用。有关更多信息,请参阅SourceMap相关文章。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据提供的引用内容,我们可以得知 Electron 底层是通过 http/https post 来上传崩溃日志的请求,因此我们可以通过 wireshark 抓包工具抓到 Electron 捕获崩溃并上传至服务器的请求。但是,Electron 本身并不支持集成 wireshark,因为 wireshark 是一个独立的抓包工具,需要单独安装和运行。 如果你想在 Electron 应用程序中集成 wireshark,你可以考虑使用 Electron 的 child_process 模块来启动 wireshark 进程,并通过 IPC 通信机制与 Electron 主进程进行通信。具体步骤如下: 1.在 Electron 应用程序中安装 wireshark,并确保 wireshark 可以在命令行中运行。 2.在 Electron 主进程中使用 child_process 模块启动 wireshark 进程,并通过 IPC 通信机制与 Electron 主进程进行通信。具体代码如下: ```javascript const { spawn } = require('child_process'); const wireshark = spawn('wireshark', ['-k']); wireshark.stdout.on('data', (data) => { console.log(`stdout: ${data}`); }); wireshark.stderr.on('data', (data) => { console.error(`stderr: ${data}`); }); wireshark.on('close', (code) => { console.log(`child process exited with code ${code}`); }); ``` 3.在 Electron 渲染进程中使用 IPC 通信机制与 Electron 主进程进行通信,并获取 wireshark 抓包数据。具体代码如下: ```javascript const { ipcRenderer } = require('electron'); ipcRenderer.on('wireshark-data', (event, data) => { console.log(data); }); ``` 4.在 wireshark 中设置过滤器,以便只捕获 Electron 应用程序的网络流量。 以上是一种可能的实现方式,但需要注意的是,集成 wireshark 可能会对 Electron 应用程序的性能产生影响,因此需要谨慎使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值