0

我一直在使用这种技术来理解我的崩溃报告(请耐心等待我第一次这样做)

崩溃报告:

最后异常回溯(最后两行来自我的程序而不是框架):

'应用程序名称' 0x0002c93e 0x2b000 + 6462

'应用程序名称' 0x0002c3f0 0x2b000 + 5104

在终端中我输入:

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

然后回来:

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

+

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

最后一行

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

然后回来:

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

+

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

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

4

3 回答 3

2

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

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

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

'appname' 0x0002c93e 0x2b000 + 6462
           ^

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

于 2012-10-08T19:42:25.547 回答
1

Xcode 具有符号化崩溃报告的功能。

如果您对此有疑问,请查看以下帖子: Xcode 4 failure to symbolicate Crash Log

此外,现在有一些很棒的工具可以让符号化变得更容易,比如 Crashlytics 和 Crittercism。

==== 更正

@Kerni 提出了一个很好的观点。这是最后一个异常回溯,所以它是一个线程。

==== 更新

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

于 2012-10-08T17:43:30.033 回答
1

延伸到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 并传递 dwarf 文件:

atos -arch armv7 -o 'appname'.app.dSYM/Contents/Resources/DWARF/'appname' 0x0002c93e
atos -arch armv7 -o 'appname'.app.dSYM/Contents/Resources/DWARF/'appname' 0x0002c3f0
于 2012-10-08T22:58:15.357 回答