iPhone – 当你无法find它时debugging崩溃

我的应用程序Crash Pad Drums报告了崩溃 。 它引用了某些cy音导致iPod 4崩溃的问题。一个问题。 我找不到iPod touch 2上的崩溃,而我没有iTouch 4。

我能做些什么呢?

另一个说明,我的应用程序是免费的今天。 如果有人可以下载它,并find崩溃的情况,我会在你的债务。

编辑:澄清

我不能真正导致崩溃,因为我没有更新的设备进行testing。 我怀疑这是一个我现在正在研究的iOS 5问题,但是在将来如果我是廉价的而不愿意购买新的iTouch,我应该怎么做?

编辑:

Console log: 2011-10-14 23:08:25.797 Crash Pad[794:12203] -[NSConcreteValue doubleValue]: unrecognized selector sent to instance 0xec9e2e0 2011-10-14 23:08:25.798 Crash Pad[794:12203] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSConcreteValue doubleValue]: unrecognized selector sent to instance 0xec9e2e0' *** First throw call stack: (0x1c49052 0x21fdd0a 0x1c4aced 0x1baff00 0x1bafce2 0x16f4f0 0x15d99e 0x14e0d8 0x168d42 0x15ace2 0x5c28c7 0x5c2a31 0x5c2d45 0x1be0f4a 0x1bac665 0x1bac056 0x5c2c43 0x249c8 0x24a58 0x8a72 0x1c4aec9 0x67a299 0x67a306 0x1c4aec9 0x67a299 0x67a306 0x5b6a30 0x5b6c56 0x59d384 0x590aa9 0x28c3fa9 0x1c1d1c5 0x1b82022 0x1b8090a 0x1b7fdb4 0x1b7fccb 0x28c2879 0x28c293e 0x58ea9b 0x1f0d 0x1e85) terminate called throwing an exceptionCurrent language: auto; currently objective-c 

你发现的是一个苹果的错误。 您可以通过animation化任何视图来轻松进行复制,如下所示:

 CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:@"transform.scale"]; anim.duration = 0.2; anim.repeatDuration = HUGE_VALF; anim.autoreverses = YES; anim.toValue = [NSValue valueWithCATransform3D:CATransform3DMakeScale(0.9, 0.9, 0.0)]; [view.layer addAnimation:anim forKey:@"throb"]; // if this isn't nil we crash on tap 

运行该项目。 点击跳动视图。 崩溃。 这个代码在iOS 3和iOS 4上是完全正确的。现在的解决方法是将forKey:设置为nil,但这可能是不可接受的,因为这个参数可能很重要 – 非零键意味着如果以后添加另一个animation用相同的键,这个animation被删除,这可能正是你想要做的。

我已经向苹果提交了一个错误报告,我build议你也这样做。

编辑(2/3/12):好的,苹果说这是我的错误,不是他们的。 由于我提供了一个转换,我需要使用@"transform"的键,而不是@"transform.scale" 。 而且,我的3D比例变换的z值应该是1,而不是0。

在debugging器中设置NSZombieEnabled , MallocStackLogging和guard malloc 。 然后,当你的应用程序崩溃时,在gdb控制台中input:

 (gdb) info malloc-history 0x543216 

用导致崩溃的对象的地址replace0x543216,您将得到一个更有用的堆栈跟踪,它应该可以帮助您find导致问题的代码中的确切行。

你有一个崩溃日志或两个,你可以发布? 这将是有益的。

鉴于它在较新的硬件上崩溃,而不是旧的,它不可能是一个内存相关的问题。 最有可能的是,这是与线程有关的时间问题; 更快的设备可以更快地完成某些任务,并在完成其他任务之前触及数据结构。 假设在不同设备上的声音播放是持续的持续时间,这将进一步证实这一理论。

它最终成为iOS 5的一个问题。我能够通过评论各种代码来缩小崩溃的原因。 如有疑问,请注明。