【问题标题】:Analyzing electron crash dumps分析电子故障转储
【发布时间】:2018-03-07 09:59:21
【问题描述】:

使用 electron-packager 打包的电子应用程序崩溃并生成转储文件。

我可以使用 breakpad、minidump_stackwalk 来查看转储文件的一部分。这是输出的快照,

7  0x7fff6026ec5d
rbp = 0x0000700005badf78   rsp = 0x0000700005badf60
rip = 0x00007fff6026ec5d
Found by: previous frame's frame pointer
8  Electron Framework + 0x2608a0
rsp = 0x0000700005bae028   rip = 0x000000010d94a8a0
Found by: stack scanning

Thread 18
 0  0x7fff60134562
rax = 0x0000000002000170   rdx = 0x0000000000000000
rcx = 0x0000700001a0fee8   rbx = 0x0000700001a10000
rsi = 0x0000000000000000   rdi = 0x0000000000000004
rbp = 0x0000700001a0ff50   rsp = 0x0000700001a0fee8
 r8 = 0x0000000000000fff    r9 = 0x00007fbc4b654000
r10 = 0x0000000000000000   r11 = 0x0000000000000246
r12 = 0x0000000000000001   r13 = 0x0000000000250015
r14 = 0x0000000000000000   r15 = 0x0000000000000004
rip = 0x00007fff60134562
Found by: given as instruction pointer in context
1  0x7fff6026ec4d
rbp = 0x0000700001a0ff78   rsp = 0x0000700001a0ff60
rip = 0x00007fff6026ec4d
  Found by: previous frame's frame pointer

Loaded modules:
0x10d6e7000 - 0x10d6e7fff  Electron Helper  0.0.0.0  (main)  (WARNING: No symbols, Electron Helper, 26BF611B7ACC305A9FC5C535A513256F0)
0x10d6ea000 - 0x11164ffff  Electron Framework  0.0.0.0
0x111ba5000 - 0x111bbffff  Squirrel  1.0.0.0
0x111be1000 - 0x111c44fff  ReactiveCocoa  1.0.0.0
0x111cb6000 - 0x111ccafff  Mantle  1.0.0.0
0x111cdc000 - 0x112beefff  libnode.dylib  0.0.0.0
0x112e7f000 - 0x1130e3fff  libffmpeg.dylib  0.0.0.0
0x116972000 - 0x1169bcfff  dyld  0.0.0.0

此信息对于识别崩溃不是很有用。 有什么方法可以获取崩溃发生的应用程序代码的堆栈跟踪吗?

另外,我不确定 WARNING 消息是否相关,或者如果是,我不确定如何修复它。

看过了,

但似乎缺乏有关调试电子崩溃报告的文档。

【问题讨论】:

    标签: electron crash-dumps electron-packager google-breakpad


    【解决方案1】:

    您正在寻找显示其crashed 的线程。

    如果没有本地的所有调试符号,minidump_stackwalk 不会给你任何非常有用的东西。看起来您上面的堆栈跟踪根本没有被解码,所以即使您找到崩溃的线程,您也可能只会看到内存地址。

    如果您可以在本地重现崩溃,获取解码堆栈跟踪的最快方法是使用backtrace.io 开设一个试用帐户并将电子崩溃报告器指向他们的服务器。他们已经拥有所有的 Electron 符号,您可以轻松获得解码堆栈。

    从长远来看,让您的生产应用程序指向远程服务器是一个好主意,这样您就可以自动获取堆栈跟踪。我们最终选择了Sentry.io,因为整个堆栈都是开源的,您可以在一个地方获得原生和 JavaScript 崩溃。

    【讨论】:

    • 谢谢。我确实使用 backtrace.io 创建了一个帐户,还从 electron release page 上传了电子符号,但他们控制台中的输出与我发布的并没有太大不同。我收到一个缺少符号的错误,缺少模块,路径:电子助手版本:0.0.0.0 debug_file:电子助手调试标识符:26BF611B7ACC305A9FC5C535A513256F0
    • 这是在 Windows 还是 Mac 上?对于 Windows,它们应该自动从电子符号服务器获取符号,而无需您上传正确的符号。对于 Mac,有两种类型的符号可供下载,我不记得它们需要哪些...
    • 啊,我看到 ReactiveCocoa 显然是在 Mac 上。
    • 是的.. 我上传了 *.darwin-x64-dsym.zip 和 *.darwin-x64-symbols.zip
    • 然后您点击了Reprocess objects 按钮?否则不知道该建议什么。
    【解决方案2】:

    您上传*dsym.zip*symobols.zip 是正确的,但我会仔细检查您是否获取了正确的版本(例如v1.8.7v2.0.0);符号文件仅与它们指定的版本兼容。

    我会尝试为每个操作系统上传每个符号文件,看起来你已经完成了,但也会上传库本身;我发现一些库没有symbolspdb 文件,所以我上传了库本身并且它工作(electron-releases 就是这种情况,它基于电子,但足够不同,所以映射已关闭)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-28
      • 1970-01-01
      相关资源
      最近更新 更多