2014-09-03 55 views
0

我从生产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扩展名?

谢谢!

+0

您需要一个完整的标准Apple格式的崩溃报告来表明这一点。也似乎有太多的信息缺失手动逐行符号化(如应用程序的加载地址) – Kerni 2014-09-03 08:34:15

+2

加载地址是'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

回答

1

您需要编译应用程序时生成的dSYM文件。 为了得到这个,你应该去Xcode上的.app文件,右键点击它并显示在finder中,然后你应该创建一个文件夹,内含dSYM文件以及你的应用程序,然后在文件夹中运行atos命令: atos -arch armv7 -o YOU​​RAPP.app'/'yourapp'0xe4ac1 - 56001 = 0xD7000

希望它有帮助!

+0

嗨大卫,非常感谢。我用dwarfdump命令和内存地址0xD7000看到了一些有意义的东西!你是怎么想出这个数字的?它看起来不像一个简单的十六进制减法。 – Andree 2014-09-04 10:10:04

+0

这只是一个例子,你得到你想desymbolicate的地址,它是你的崩溃日志的右列的行之一 – 2014-09-04 11:40:56

相关问题