@ 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相关文章。