iPhone应用程序在从Xcode启动时崩溃,但不是从iPhone启动

时间:2010-07-10 14:23:27

标签: iphone xcode memory crash launchd

我的应用程序在iPhone上崩溃,但只有在通过Xcode启动时才会崩溃。

我可以在iPhone控制台日志中看到该应用收到内存警告,然后有一些奇怪的事件,如:

Sun Jul 11 00:03:43 Matts-iPhone com.apple.launchd[1] (UIKitApplication:com.mycom.myapp[0x3f60][5591]) <Notice>: (UIKitApplication:com.mycom.myapp[0x3f60]) Bug: launchd_core_logic.c:3270 (24132):0
Sun Jul 11 00:03:43 Matts-iPhone com.apple.debugserver-48[5590] <Warning>: 1 [15d6/1403]: error: ::read ( 6, 0x3809f4, 1024 ) => -1 err = Bad file descriptor (0x00000009)
Sun Jul 11 00:03:43 Matts-iPhone com.apple.launchd[1] (UIKitApplication:com.mycom.myapp[0x3f60][5591]) <Notice>: (UIKitApplication:com.mycom.myapp[0x3f60]) Bug: launchd_core_logic.c:2688 (24132):10
Sun Jul 11 00:03:43 Matts-iPhone com.apple.launchd[1] (UIKitApplication:com.mycom.myapp[0x3f60][5591]) <Notice>: (UIKitApplication:com.mycom.myapp[0x3f60]) Working around 5020256. Assuming the job crashed.
Sun Jul 11 00:03:43 Matts-iPhone com.apple.launchd[1] (UIKitApplication:com.mycom.myapp[0x3f60][5591]) <Warning>: (UIKitApplication:com.mycom.myapp[0x3f60]) Job appears to have crashed: Segmentation fault
Sun Jul 11 00:03:43 Matts-iPhone SpringBoard[40] <Warning>: Application 'Phone' exited abnormally with signal 9: Killed
Sun Jul 11 00:03:45 Matts-iPhone SpringBoard[40] <Warning>: Application 'myapp' exited abnormally with signal 11: Segmentation fault

然而,当我从手机启动应用程序(而不是通过Xcode)时,它按预期工作。 (在发布期间有一个内存警告。我知道它正在运行,但它会恢复并且不会崩溃)。

这使得调试其他问题变得特别困难。

我偶然发现了一些iOS错误吗?

有什么想法吗?

4 个答案:

答案 0 :(得分:7)

在我的情况下,我忘记了我仍然有“NSZombiesEnabled”环境变量集,这从Xcode启动时增加了实际内存使用量(导致崩溃)。直接从Springboard启动时,未设置该环境变量,并且应用程序使用的内存更少。

这对于调试来说非常有用......直到你的内存耗尽并忘记它为止:)

答案 1 :(得分:2)

这发生在我身上,也是由于NSZombiesEnabled被设置。在我的情况下,它被设置在我忘记存在的〜/ .gdbinit文件中。在Xcode中,NSZombieEnabled复选框已关闭,并且该方案的环境变量中没有任何设置,所以它让我疯狂地试图找出问题。故事的道德是确保它不在.gdbinit和XCode中设置。

答案 2 :(得分:2)

我也有这个问题,这是因为从Cydia安装了Resupported 4。删除后,我的应用程序启动完美。

答案 3 :(得分:0)

通常,当您在模拟器上看到崩溃而非设备崩溃时,或者反之亦然,它表示针对一个硬件而不是另一个硬件编译的库出现故障。

但是,如果您的内存不足,那么您可能会看到由针对英特尔编译的代码与针对ARM编译的代码之间的细微差异导致的崩溃。出于某种原因,英特尔代码可能更敏感。如果你在紧张的内存下运行足够长的话,最终会在设备上出现同样的问题。