4

我有一个在 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

4 回答 4

7

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

它对调试非常有用......直到你用完内存并忘记它的存在:)

于 2010-09-06T10:40:25.823 回答
2

这发生在我身上,也是由于设置了 NSZombiesEnabled。就我而言,它被设置在我忘记存在的 ~/.gdbinit 文件中。在 Xcode 中,NSZombieEnabled 复选框处于关闭状态,并且该方案的环境变量中没有设置任何内容,所以它让我疯狂地试图找出问题。故事的寓意是确保它没有在 .gdbinit 和 XCode 中设置。

于 2011-11-04T00:50:10.907 回答
2

我也遇到了这个问题,这是由于从 Cydia 安装了 Resupported 4 造成的。删除它后,我的应用程序完美启动。

于 2012-07-16T03:25:41.860 回答
0

通常,当您在模拟器上看到崩溃但在设备上没有崩溃时,反之亦然,这表明为一个硬件而不是另一个硬件编译的库出现故障。

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

于 2010-07-10T14:32:34.680 回答