当设备未连接到Xcode时应用程序崩溃

3
我在我的iPhone应用程序中遇到了奇怪的问题。当使用Xcode进行调试时,设备上运行得很好,但是当设备未连接到计算机时,在设备上运行几乎立即崩溃。无需多言,我觉得这有点令人不安,因为我不知道如何调试它。
有人有关于发生了什么或如何调试此类问题的想法吗?
我重新连接设备并查看崩溃报告,得到以下内容:
Exception Type:  EXC_BAD_ACCESS (SIGBUS)
Exception Codes: KERN_PROTECTION_FAILURE at 0x00000070
Crashed Thread:  6

Thread 6 Crashed:
0   libobjc.A.dylib                 0x300102ac 0x3000c000 + 17068
1   myapp                            0x000033ba 0x1000 + 9146
2   myapp                           0x0000adc8 0x1000 + 40392
3   Foundation                      0x30553356 0x30501000 + 336726
4   Foundation                      0x305025fe 0x30501000 + 5630
5   libSystem.B.dylib               0x31d6a6ea 0x31d46000 + 149226

并且控制台日志如下:

Sun Sep 27 19:59:50 unknown ReportCrash[455] <Notice>: Formulating crash report for process myapp[453]
Sun Sep 27 19:59:50 unknown com.apple.launchd[1] <Warning>: (UIKitApplication:com.yourcompany.myapp[0x2fba]) Job appears to have crashed: Bus error
Sun Sep 27 19:59:50 unknown com.apple.mobile.lockdown[14] <Notice>: Could not receive size of message
Sun Sep 27 19:59:50 unknown lockdownd[14] <Error>: (0x834400) handle_connection: Could not receive internal message #2 from myapp Killing connection
Sun Sep 27 19:59:50 unknown SpringBoard[23] <Warning>: Application 'myapp' exited abnormally with signal 10: Bus error

许多感谢。
2个回答

10

您始终可以找出应用程序崩溃的行。打开构建文件夹中的终端并运行此命令:

atos -arch armv6 -o myapp.app/myapp 0x000033ba

它将返回文件和行号。这在某种程度上是有用的。


6

为了概括@seppo0010的答案并将其更新至2011年:


首先,在Xcode4中,设备日志(在组织者窗口中找到)将显示崩溃的线程、文件和行号,因此可能不需要使用atos。这些崩溃可以按应用程序、类型和日期/时间进行排序。一个典型的崩溃会包含如下内容:

Thread 1 name:  Dispatch queue: someQueue
Thread 1 Crashed:
0   MyApp   0x00003e14 -[MyAppViewController someMethod:withParam1:andParam2:] (MyAppViewController.m:254)


但如果你决定使用atos,请注意以下几点:

  • 确保将 -arch 标志更改为与您的代码运行的架构相匹配。因此,对于我的 iPhone 4,我会输入 -arch armv7

  • Xcode 4 将您的构建路径放在不同的位置,请务必检查 Xcode > Prefs > Locations。您实际构建的路径可能看起来像这样:/Users/OldMcStopher/Library/Developer/Xcode/DerivedData/MyApp-someUglyString/Build/Products/Debug-iphoneos

  • -o 标志正在寻找实际的二进制文件,而不仅仅是 myapp.app 包装器,因此一旦进入 Debug-iphoneos 文件夹(或任何您的调试 .app 构建所在的位置),请将 -o 标志设置为 MyApp.app/MyApp,就像 @seppo0010 正确说明的那样。

atos 的 man 页面如下所示:

atos 命令将数字地址转换为其符号等效项。如果提供了完整的调试符号信息,例如在 .app 旁边的 .app.dSYM 中,则 atos 的输出将包括文件名和源行号信息。

可以在此处找到它: http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man1/atos.1.html

(或从终端使用 man atos 命令。)


感谢您指出Xcode组织器中的设备日志! - colincameron

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接