我的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
非常感谢
答案 0 :(得分:10)
您可以随时访问应用程序崩溃的位置。打开build文件夹上的终端并运行以下命令:
atos -arch armv6 -o myapp.app/myapp 0x000033ba
它将返回文件和行所在的位置。它有点用处。
答案 1 :(得分:6)
只是为了概括@ seppo0010的答案并将其更新为2011年:
<小时/> 首先,在Xcode4中,设备日志(在管理器窗口中找到)将显示崩溃的线程,文件和行号,因此甚至可能不需要。可以按应用程序,类型和日期/时间对崩溃进行排序。典型的崩溃将包括以下内容:
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手册页描述如下:
atos命令将数字地址转换为符号 等价物。如果有完整的调试符号信息,则 例如.app.dSYM位于.app旁边,然后是atos的输出 将包括文件名和源行号信息。
可以在这里找到: http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man1/atos.1.html
(或来自终端的man atos
。)