iOS:表示带有异常原因的崩溃日志

iOS:表示带有异常原因的崩溃日志,ios,exception-handling,crash,symbolicatecrash,symbolicate,Ios,Exception Handling,Crash,Symbolicatecrash,Symbolicate,Soo,随着TestFlight的结束,能够完全理解iOS crashlogs变得更加迫切。 关于这一主题,这里有很多问题,但根据我的经验,没有一个解决方案能够提供足够的洞察崩溃本身的能力。 在iOS的世界里,关于这一点似乎仍然存在相当大的困惑 为了便于完成,这里是我找到并采取的方法和步骤 (Disclamer:我可以访问所有文件:app文件、.dSYM和.crash文件) 1 |崩溃-命令行实用程序 定义开发者目录:export developer\u DIR=“/Applications/

Soo,随着TestFlight的结束,能够完全理解iOS crashlogs变得更加迫切。

关于这一主题,这里有很多问题,但根据我的经验,没有一个解决方案能够提供足够的洞察崩溃本身的能力。 在iOS的世界里,关于这一点似乎仍然存在相当大的困惑

为了便于完成,这里是我找到并采取的方法和步骤

(Disclamer:我可以访问所有文件:app文件、.dSYM和.crash文件)

1 |崩溃-命令行实用程序

  • 定义开发者目录:
    export developer\u DIR=“/Applications/Xcode.app/Contents/developer”
  • 从其原始目录安装该实用程序:
    sudo cp/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKitBase.framework/Versions/A/Resources/symbolicatecrash/usr/bin
  • dSYM文件、.app文件和.crash文件放入同一文件夹中
  • symbolicatecrash“FILENAME.crash”“FILENAME.app”“FILENAME.app.dSYM”
2|atos-命令行实用程序

  • 打开崩溃文件,从堆栈跟踪中一次获取一行内存地址,如下所示:
    8我的应用程序0x000ad031 0xa7000+24625的名称
  • 并使用atos来表示这一行:
    atos-arch armv7-o NAME_OF_MY_APP.APP/NAME_OF_MY_APP 0x000ad031 0xa7000+24625
3|gdb

  • Jerry Krinock在第三个选项上发表了一篇很棒的帖子……但是它使用了gdb,而gdb在OS X Mavericks中不再可用:

现在要么我是傻瓜,要么我是傻瓜,要么我两者都是,但对我来说,所有这些方法的问题在于它们不一致。

根据我的经验,使用
symbolicatecrash
进行符号化将为所有堆栈跟踪提供方法名称,但是没有行号几乎没有关于抛出异常的信息。

Atos
更具描述性,但仍然没有异常描述,您必须手动为所有需要符号化的行执行此操作

另外,
atos
有时指向的方法调用不在
symbolicatecrash
的输出中

当我将一个构建和.dSYM一起上传到TestFlight时,他们可以给我精确的方法名、行号和异常描述,而这些我在这些符号中找不到


即使在crashlog中也有异常描述吗?

我们是否必须在应用程序中实现未处理的异常处理程序,并将报告发送到“主页”(即发送到web服务器)才能访问引发的异常,在哪里?

  • 命令行实用程序

    您调用的脚本错误,应该是:

    symbolicatecrash“FILENAME.crash”“NAME\u OF_MY\u APP.APP.dSYM”

  • atos-命令行实用程序

    这一呼吁也是错误的:

    atos-arch armv7-l加载应用程序的地址-o名称\u我的应用程序的名称.APP.dSYM 0x000ad031

    其中,应用程序的
    LOAD\u ADDRESS\u是应用程序的
    二进制图像部分中显示的第一个地址。另请参见:

  • 关于其他问题/备注:

    • 未使用
      符号显示行号

      这是因为您传递了应用程序二进制文件,该文件大部分都已删除了所有符号(由于大小),即使这些符号不会被删除,也不会显示行号。如果有,请始终使用dSYM进行符号化

    • 缺少异常说明:

      在大多数情况下,苹果的iOS崩溃报告不会在报告中提供包含该信息的
      应用程序特定信息
      块。如果只有苹果的崩溃报告,您将无能为力

    一些补充资料:

    • 符号化系统调用

      您将需要创建崩溃报告时使用的特定CPU体系结构和iOS版本的符号。因此,您将需要至少一台具有特定iOS版本的armv7设备和一台arm64设备,并至少将这些设备连接到Xcode,以便导入符号。否则,在报告

    • 让Xcode来象征它

      如果您的系统设置正确,您只需将崩溃报告拖到Xcode organizer的顶部
      设备日志
      条目中,它就会为您调用symbolicatecrash,并通过Spotlight找到正确的dSYM。(需要通过Spotlight对dSYMs文件夹进行索引)

    • 收集碰撞报告的替代方案

      收集崩溃报告有多种选择。开源解决方案、免费服务和付费服务提供SDK,用于收集应用程序中的崩溃报告并将其发送到服务器,自动对其进行符号化和分组。(免责声明:我是开源项目的开发人员和服务的联合创始人)


    谢谢你的详细回答!我一定会看看曲棍球!