在iOS应用程序中读取生产崩溃日志
我从生产iOS应用程序发出崩溃报告,该报告已自动登录到我们自己的服务器中。崩溃日志[NSException说明]和[NSException callStackSymbols],一串组合看起来如下:在iOS应用程序中读取生产崩溃日志
Terminating app due to uncaught exception: *** setObjectForKey: object cannot be nil (key: dict_key).
0 CoreFoundation 0x2f00dee3 <redacted> + 154
1 libobjc.A.dylib 0x397a4ce7 objc_exception_throw + 38
2 CoreFoundation 0x2ef4917f <redacted> + 818
3 MyAppName 0x0010ef3f MyAppName + 229183
4 MyAppName 0x000e5401 MyAppName + 58369
5 MyAppName 0x000e4ac1 MyAppName + 56001
6 UIKit 0x31843a33 <redacted> + 518
... (Removed for brevity)
有了这个信息,我怎么能产生.crash
文件,可以通过symbolicatecrash
命令读取?我可以简单地将这个崩溃日志存储在一个文本文件中,并将其命名为.crash
扩展名?
谢谢!
您需要编译应用程序时生成的dSYM文件。 为了得到这个,你应该去Xcode上的.app文件,右键点击它并显示在finder中,然后你应该创建一个文件夹,内含dSYM文件以及你的应用程序,然后在文件夹中运行atos命令: atos -arch armv7 -o YOURAPP.app'/'yourapp'0xe4ac1 - 56001 = 0xD7000
希望它有帮助!
嗨大卫,非常感谢。我用dwarfdump命令和内存地址0xD7000看到了一些有意义的东西!你是怎么想出这个数字的?它看起来不像一个简单的十六进制减法。 – Andree 2014-09-04 10:10:04
这只是一个例子,你得到你想desymbolicate的地址,它是你的崩溃日志的右列的行之一 – 2014-09-04 11:40:56
您需要一个完整的标准Apple格式的崩溃报告来表明这一点。也似乎有太多的信息缺失手动逐行符号化(如应用程序的加载地址) – Kerni 2014-09-03 08:34:15
加载地址是'0xe4ac1 - 56001 = 0xD7000'。您需要使用atos手动使用此地址来获取应用程序的堆栈帧的符号。请参阅http://stackoverflow.com/questions/13574933/ios-crash-reports-atos-not-working-as-expected/13576028#13576028 – Kerni 2014-09-03 08:58:24