象征着iOS .crash文件

时间:2014-11-09 02:35:27

标签: ios

我尝试使用“atos”命令行实用程序从.crash文件中查找方法名称,但是获取了错误的方法名称。例如:崩溃日志说异常是由于发送消息到UIComponent无法识别的选择器发送到激烈但在符号化“atos”后显示网络相关类中的方法。

正如iOS crash reports: atos not working as expected所建议的那样https://developer.apple.com/library/mac/qa/qa1765/_index.html在我的情况下尝试查看“Slide& LoadAddress”,这些都是相同的(幻灯片:0x4000 LoadAdress:0x4000)。

我还验证了我正在使用的.iPA文件是正确的,如下所示:http://www.filedropper.com/symbolicate

我不确定哪里出错了。任何人都可能遇到同样的问题吗?请建议任何其他方法。

我有.iPA文件和.crash文件,需要找出正确的方法名称。

以下是完整的崩溃报告:

{{3}}

找出.iPA的命令是正确的:

dwarfdump --uuid Example.app/Example

找出方法名称的命令:

atos -arch armv7 -o Example.app/Example -l 0x4000 0x7f68bb0 0x3017d000 + 84904

这是在网络类中给出一个我没有任何UIComponent的方法。

如果您需要更多详细信息,请与我们联系。

由于 希瓦。

1 个答案:

答案 0 :(得分:1)

有很多事情:

  1. 崩溃是由异常引起的,崩溃报告未显示所需的Last Exception Backtrace
  2. 主线程的符号化只会显示第12帧中的main.m调用和线程0的第2帧中未捕获的异常处理程序
  3. 崩溃报告由旧版PLCrashReporter(由顶部的两个[TODO]文本标识)编写,或者您正在使用另一台服务器进行未捕获的异常。因此,崩溃报告对您没有帮助。
  4. 您应该将atos与应用dSYM一起使用而不是应用二进制文件。使用应用程序二进制文件永远不会显示文件名或行号,如果您不从可执行文件中删除符号,则只显示类名和方法。但是你应该从可执行文件中删除它们以保持二进制文件尽可能低(节省30-50%)。
  5. 您拨打atos的方式是错误的。 0x7f68bb0 0x3017d000 + 84904不是有效选项,事实上您的崩溃报告甚至不包含该选项。相反,您只需要在每帧二进制名称后面使用第一个地址。所以对于以下行:

    2   Example                               0x001ffe3b 0x4000 + 2080315
    

    您可以按如下方式使用atos:

    `atos -arch -armv7 -l 0x4000 -o Example.app.dSYM 0x001ffe3b`
    
  6. 您应该更新崩溃报告SDK以使用最新的PLCrashReporter版本,并确保在报告中正确显示异常。