我有一个iOS应用程序,在XCode 4.0.1中具有以下(选定的)构建设置:
在Targets / Build Phases下,我将libSystem.B.dylib作为Optional(Link Binary with Libraries)。
在第一代iPod Touch上,我得到以下结果:
在案例4中,崩溃报告如下所示:
Incident Identifier: 10B8B9C5-0FA5-4C83-AB13-4C3F59D5962D
CrashReporter Key: 29f7901a33e9b055c9034cd051902ea0c87e61f6
Process: TPE [1484]
Path: /var/mobile/Applications/4FA4C8CA-DB5D-4096-8458-C76382E68D02/TPE.app/TPE
Identifier: TPE
Version: ??? (???)
Code Type: ARM (Native)
Parent Process: launchd [1]
Date/Time: 2011-04-09 17:56:58.188 +1000
OS Version: iPhone OS 3.1.3 (7E18)
Report Version: 104
Exception Type: EXC_BAD_ACCESS (SIGBUS)
Exception Codes: KERN_PROTECTION_FAILURE at 0x00000000
Crashed Thread: 0
Thread 0 Crashed:
0 libSystem.B.dylib 0000000000 0 + 0
Thread 1:
0 libSystem.B.dylib 0x00001488 mach_msg_trap + 20
1 libSystem.B.dylib 0x00004064 mach_msg + 60
etc.
在代码中的一些例程执行后发生崩溃(我可以看到控制台输出确认它)。
有没有人有任何想法会导致它在GCC4.2下工作,但在LLVM2下崩溃?
答案 0 :(得分:1)
这只是一个疯狂的猜测,但最近在llvm2中有一个编译器错误使我们的应用程序以同样的方式崩溃。它只发生在具有完全优化的发布模式中,并且仅发生在较旧的设备上(可能是特定的处理器)。我们切换回gcc,一切都很好。 Apple在平均时间更新了他们的编译器,“修复了iOS的错误”,但我们还没有测试它。
答案 1 :(得分:1)
使用Apple LLVM编译器3.0生成代码时,XCode 4.2(4D199)仍然会出现同样的问题。
AdHoc App在iOS5的模拟器,iPad1和iPhone4上运行良好。 iOS 4.2.1(8C148)上的iPhone 3和iPod3上的相同AdHoc代码崩溃。
调试代码适用于所有平台。
出现问题时,控制台日志显示以下内容:
SpringBoard[25] <Warning>: Received memory warning. Level=1
MobileSafari[283] <Warning>: Received memory warning. Level=1
configd[23] <Notice>: jetsam: kernel memory event (93), free: 241, active: 1109, inactive: 760, purgeable: 0, wired: 7878
configd[23] <Notice>: jetsam: kernel termination snapshot being created
com.apple.launchd[1] <Notice>: (UIKitApplication:com.apple.mobilesafari[0xc614]) Exited: Killed
com.apple.launchd[1] <Notice>: (UIKitApplication:com.myapp.test[0x47db]) Exited: Killed
SpringBoard[25] <Warning>: Application 'MyApp' exited abnormally with signal 9: Killed
应用程序的峰值内存使用量是几Mb。调试代码永远不会达到临界内存限制。
以下任何一个问题都会消失:
到目前为止,对代码和内存管理的广泛分析并未提供可能导致此问题的原因。这似乎是一个编译器错误...