crashReporter
将崩溃报告提交到远程服务器。
如果想在启用了上下文隔离的渲染进程中调用此 API,请将 API 调用放在你的 preload 脚本中,并使用 expose 它,通过 contextBridge API。
以下是设置 Electron 以自动提交崩溃报告到远程服务器的示例
const { crashReporter } = require('electron')
crashReporter.start({ submitURL: 'https://your-domain.com/url-to-submit' })
要设置一个服务器来接收和处理崩溃报告,你可以使用以下项目
Electron 使用 Crashpad,而不是 Breakpad 来收集和上传崩溃,但目前,上传协议是相同的。
或者使用第三方托管解决方案
崩溃报告在上传之前会临时存储在应用用户数据目录下的一个名为 'Crashpad' 的目录中。你可以在启动崩溃报告器之前,通过调用 app.setPath('crashDumps', '/path/to/crashes') 来覆盖此目录。
Electron 使用 crashpad 来监控和报告崩溃。
方法
crashReporter 模块具有以下方法
crashReporter.start(options)
此方法必须在调用任何其他 crashReporter API 之前调用。初始化后,crashpad 处理程序将收集随后创建的所有进程中的崩溃。启动后无法禁用崩溃报告器。
应在应用启动时尽快调用此方法,最好在 app.on('ready') 之前。如果崩溃报告器在创建渲染进程时未初始化,则该渲染进程将不会被崩溃报告器监控。
你可以使用 process.crash() 生成崩溃来测试崩溃报告器。
如果你需要在第一次调用 start 之后发送额外的/更新的 extra 参数,你可以调用 addExtraParameter。
在 extra、globalExtra 或使用 addExtraParameter 设置的参数中,键和值的长度有限制。键名称的最大长度为 39 个字节,值不得超过 127 个字节。超过最大长度的键名称将被静默忽略。超过最大长度的键值将被截断。
此方法仅在主进程中可用。
crashReporter.getLastCrashReport()
返回 CrashReport | null - 上次崩溃报告的日期和 ID。只有已上传的崩溃报告才会被返回;即使崩溃报告存在于磁盘上,在上传之前也不会被返回。如果没有上传的报告,则返回 null。
此方法仅在主进程中可用。
crashReporter.getUploadedReports()
返回所有已上传的崩溃报告。每个报告包含日期和上传 ID。
此方法仅在主进程中可用。
crashReporter.getUploadToServer()
返回 boolean - 是否应该将报告提交到服务器。通过 start 方法或 setUploadToServer 设置。
此方法仅在主进程中可用。
crashReporter.setUploadToServer(uploadToServer)
uploadToServerboolean - 是否应该将报告提交到服务器。
这通常由用户偏好控制。如果在调用 start 之前调用此方法,则无效。
此方法仅在主进程中可用。
crashReporter.addExtraParameter(key, value)
keystring - 参数键,最大长度为 39 个字节。valuestring - 参数值,最大长度为 127 个字节。
设置要与崩溃报告一起发送的额外参数。此处指定的值将与在调用 start 时 extra 选项中设置的值一起发送。
以这种方式添加的参数(或通过 extra 参数传递给 crashReporter.start)是特定于调用进程的。在主进程中添加额外的参数不会导致这些参数与来自渲染器或其他子进程的崩溃一起发送。同样,在渲染器进程中添加额外的参数不会导致这些参数与发生在其他渲染器进程或主进程中的崩溃一起发送。
参数的键和值的长度有限制。键名称的最大长度为 39 个字节,值不得超过 20320 个字节。超过最大长度的键名称将被静默忽略。超过最大长度的键值将被截断。
crashReporter.removeExtraParameter(key)
keystring - 参数键,最大长度为 39 个字节。
从当前参数集中删除一个额外的参数。未来的崩溃将不包含此参数。
crashReporter.getParameters()
返回 Record<string, string> - 崩溃报告器的当前“extra”参数。
在 Node 子进程中
由于 require('electron') 在 Node 子进程中不可用,因此以下 API 在 Node 子进程的 process 对象上可用。
process.crashReporter.start(options)
请注意,如果在主进程中启动崩溃报告器,它将自动监控子进程,因此不应在子进程中启动它。仅当主进程未初始化崩溃报告器时才使用此方法。
process.crashReporter.getParameters()
请参阅 crashReporter.getParameters()。
process.crashReporter.addExtraParameter(key, value)
请参阅 crashReporter.addExtraParameter(key, value)。
process.crashReporter.removeExtraParameter(key)
请参阅 crashReporter.removeExtraParameter(key)。
崩溃报告有效负载
崩溃报告器将以 multipart/form-data POST 的形式将以下数据发送到 submitURL
verstring - Electron 的版本。platformstring - 例如 'win32'。process_typestring - 例如 'renderer'。guidstring - 例如 '5e1286fc-da97-479e-918b-6bfb0c3d1c72'。_versionstring -package.json中的版本。_productNamestring -crashReporteroptions对象中的产品名称。prodstring - 基础产品的名称。在这种情况下是 Electron。_companyNamestring -crashReporteroptions对象中的公司名称。upload_file_minidumpFile -minidump格式的崩溃报告。crashReporteroptions对象中extra对象的全部一级属性。