我一直在使用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个选择器/方法签名显示而不是只有一个,并且有没有办法让它崩溃的行号?
答案 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)
扩展到answer的ughoavgfhw:
你在这个电话中得到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