iPhone - 当您找不到它时调试崩溃

Dan*_*son 5 iphone xcode objective-c ios

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

我能做些什么呢?

另外,我的应用程序今天是免费的.如果有人可以下载它并找到崩溃的情况,我将欠你的债务.

编辑:澄清

我实际上无法导致崩溃,因为我没有更新的设备可供测试.我怀疑这是我现在正在研究的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
Run Code Online (Sandbox Code Playgroud)

mat*_*att 12

你发现的是一个Apple bug.您可以通过设置任何视图的动画来轻松复制,如下所示:

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
Run Code Online (Sandbox Code Playgroud)

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

我已向Apple提交了错误报告,我建议您也这样做.

编辑(2/3/12):好的,Apple说这是我的错误,而不是他们的错误.因为我正在提供转换,所以我需要使用键@"transform",而不是@"transform.scale".而且,我的3D比例变换的z值应该是1,而不是0.


cho*_*own 7

在调试器中设置NSZombieEnabled,MallocStackLoggingguard malloc.然后,当您的应用程序崩溃时,在gdb控制台中键入:

(gdb) info malloc-history 0x543216
Run Code Online (Sandbox Code Playgroud)

将0x543216替换为导致崩溃的对象的地址,您将获得更有用的堆栈跟踪,它可以帮助您查明代码中导致问题的确切行.