在iOS上,出于安全原因,调试符号会从发布二进制文件中删除。那么崩溃报告工具如Fabric,Hockey等" desymbolicate"并从发布版本中显示崩溃点的良好堆栈跟踪???
他们是否自己捕获/追踪崩溃,而不是依靠操作系统生成的跟踪?
答案 0 :(得分:2)
以下内容适用于OS X,iOS,tvOS以及watchOS:
DEBUG_INFORMATION_FORMAT
设置为DWARF with dSYM File
),那么无论您何时构建,您还将获得一个dSYM包,其中包含一个包含所有内容的dwarf文件需要象征性地获取文件名和行号。那么iTunes Connect,Xcode,Fabric,HockeyApp等实际上如何进行符号化?
他们都在使用dSYM包中的dwarf文件。它们从堆栈帧中获取内存地址,通过匹配地址范围在崩溃报告的二进制映像部分找到相应的二进制映像,获取二进制映像的UUID,找到包含匹配的UUID的dSYM包CPU架构,然后针对它运行atos
之类的工具来获取(解码的)符号。
他们如何获得堆栈跟踪?