iOS:表示带有异常原因的崩溃日志
Soo,随着TestFlight的结束,能够完全理解iOS crashlogs变得更加迫切。 关于这一主题,这里有很多问题,但根据我的经验,没有一个解决方案能够提供足够的洞察崩溃本身的能力。 在iOS的世界里,关于这一点似乎仍然存在相当大的困惑 为了便于完成,这里是我找到并采取的方法和步骤 (Disclamer:我可以访问所有文件:app文件、.dSYM和.crash文件) 1 |崩溃-命令行实用程序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/
- 定义开发者目录:
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”
- 打开崩溃文件,从堆栈跟踪中一次获取一行内存地址,如下所示:
8我的应用程序0x000ad031 0xa7000+24625的名称
- 并使用atos来表示这一行:
atos-arch armv7-o NAME_OF_MY_APP.APP/NAME_OF_MY_APP 0x000ad031 0xa7000+24625
- 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-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,用于收集应用程序中的崩溃报告并将其发送到服务器,自动对其进行符号化和分组。(免责声明:我是开源项目的开发人员和服务的联合创始人)