破译崩溃报告

时间:2012-10-08 17:33:03

标签: objective-c ios crash-reports

我一直在使用this technique来了解我的崩溃报告(请耐心等待我第一次这样做)

崩溃报告:

Last Exception Backtrace(最后2行来自我的程序,而不是框架):

  

'appname'0x0002c93e 0x2b000 + 6462

     

'appname'0x0002c3f0 0x2b000 + 5104

在终端我输入:

  

atos -arch armv7 -o'appname'.app /'appname'0x2b000 + 6462

然后回来:

  

- [CameleonInCallNumberListViewControler callChange](在'appname'中)+ 6464

     

+

     

- [CameleonAppDelegate applicationWillEnterForeground:](在'appname'中)+ 546

和最后一行

  

atos -arch armv7-oCaméléon.app/Caméléon0x2b000+ 5104

然后回来:

  

- [CameleonInCallNumberListViewControler callChange](在'appname'中)+ 6464

     

+

     

- [CameleonAddressbookViewController gPressed](在'appname'中)+ 88

所以我的问题是为什么有2个选择器/方法签名显示而不是只有一个,并且有没有办法让它崩溃的行号?

3 个答案:

答案 0 :(得分:2)

您提供两个数字,因此该工具正在寻找两种方法

atos -arch armv7 -o Caméléon.app/Caméléon 0x2b000 + 5104
                                            ^1       ^2

由于它们是分开的,因此它们被视为不同的参数。您应该只使用堆栈跟踪的每一行中的第一个数字。

'appname' 0x0002c93e 0x2b000 + 6462
           ^

此数字是函数调用的实际地址。您正在使用的下一个数字是方法的开头位置和该方法中的偏移量。这就是为什么每个测试的第一个结果是相同的。它们发生在相同的方法中,而不是同一条线。

答案 1 :(得分:1)

Xcode具有表示崩溃报告的功能。

如果您遇到问题,请查看以下帖子: Xcode 4 failure to symbolicate Crash Log

此外,现在还有一些令人惊叹的工具可以让像Crashlytics和Crittercism更容易象征事物。

====更正

@Kerni提出了一个很好的观点。这是一个Last Exception Backtrace,所以它是一个线程。

====更新

@Kerni是的,听过关于QuincyKit和HockeyApp的好消息。对遗漏道歉。

答案 2 :(得分:1)

扩展到answerughoavgfhw

你在这个电话中得到3个结果,而不是两个!

您的atos电话实际上会检查3个地址:0x2b000 + 6462,这就是您在返回时看到3行的原因!第二次检查这3个:0x2b000 + 5104

如果你想检查应用程序二进制文件(它不会返回行号!),你应该使用它:

atos -arch armv7 -o 'appname'.app/'appname' 0x0002c93e
atos -arch armv7 -o 'appname'.app/'appname' 0x0002c3f0

如果你想获得行号,请调用atos并传递矮人文件:

atos -arch armv7 -o 'appname'.app.dSYM/Contents/Resources/DWARF/'appname' 0x0002c93e
atos -arch armv7 -o 'appname'.app.dSYM/Contents/Resources/DWARF/'appname' 0x0002c3f0