当我尝试在XCode 4.0.1中使用LLVM 2.0构建我的应用程序以及任何级别或非优化级别(除了-O0之外的任何级别)时,应用程序在我在设备上启动后崩溃(模拟器正常)。我似乎无法调试崩溃,因为当我构建xcode并通过GDB / LLDB附加时它不会发生。此外,崩溃只发生在我使用xcodebuild在命令行上构建应用程序时;即使使用完全相同的项目设置,通过XCode IDE构建也不会崩溃。我在崩溃日志中看不到任何有用的信息,因为崩溃发生在我的代码之外:
Exception Type: EXC_BAD_ACCESS (SIGBUS)
Exception Codes: KERN_PROTECTION_FAILURE at 0x00b53400
Crashed Thread: 0
Thread 0 name: Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0 ??? 0x00b53400 0 + 11875328
它不会正确地符号化,因为它不知道崩溃发生在哪个库中。
设备控制台显示我们的应用程序在启动时创建的一些NSLog语句,然后加载和绘制第一个屏幕的UI,然后发生崩溃。没有优化的构建,或使用任何优化级别的GCC 4.2构建都可以正常工作。
这里可能会发生什么,我该如何调试呢?在构建和部署应用程序与xcodebuild命令行界面时,XCode IDE可以采取哪些不同的做法?
答案 0 :(得分:9)
我们的应用程序遇到了同样的问题。它仅影响发布/分发版本中的 armv6 代码,因此仅影响iPhone 3G和iPod Touch 2G。但与你的描述相反,它可以用XCode重现(我们不使用xcodebuild)。
显然,生成的代码会破坏堆栈指针。因此,您无法真正调试它,崩溃日志也毫无价值。使用调试器,它可以停在应该显示的第一个视图的 viewWillAppear:animated 。但很快,应用程序总是崩溃。
切换到较旧的编译器解决了这个问题。
我已经向Apple提交了一个错误。请提交一份,因为据说可以增加错误的优先级。
有更多人报告同样的问题:
答案 1 :(得分:1)
升级到Xcode 4.0.2。
它为我们解决了这个问题(ARMv6启动时崩溃,但启动了优化的ARMv7崩溃)。