【问题标题】:iPhone - Debugging a crash when you can't find itiPhone - 在找不到崩溃时调试崩溃
【发布时间】:2013-08-12 17:49:58
【问题描述】:

在我的应用程序Crash Pad Drums 中报告了崩溃。 它引用了导致 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

【问题讨论】:

  • 也许重命名应用程序?对不起。忍不住...
  • 大声笑。你确实有一点,这是一个有潜在危险的名字。并且发现碰撞垫中的碰撞钹发生碰撞......哈哈。
  • 这个问题还有什么不好的? -1?

标签: iphone objective-c ios xcode


【解决方案1】:

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

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,但这可能是不可接受的,因为此参数可能很重要 - 非 nil 键意味着如果您稍后添加另一个具有相同键的动画,此动画将被删除,这可能正是您想要做的。

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

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

【讨论】:

  • @bbum - 应该是 10642040。感谢您的关注!
  • 这正是我遇到的问题,自动反转 CATransform 和一切。很高兴不只是我,但我希望在将整个内容更改为动画块之前尝试将 forKey 设置为 nil。
  • 给你检查,因为你的回答实际上显示了崩溃背后的原因。
  • 非常感谢。我偶然发现了同一个错误并且能够如此简洁地表达它是纯属偶然的(纯属偶然的是,尝试了我能想到的一切,我偶然发现了一种解决方法)。我通过搜索错误消息-[NSConcreteValue doubleValue]: unrecognized selector sent to instance... 找到了您的帖子,它只是显示,总是显示崩溃日志!
  • @matt,Apple 关于 keypath 的解释是否为您解析?他们的回答似乎与 CA Programming Guide 文档背道而驰。在我的应用程序中,我想要将动画应用于比例,不考虑旋转(我的应用程序具有纵向和横向模式的自定义逻辑)。使用“transform”作为 keypath 会产生不希望的瞬时旋转效果,而“transform.scale”仅在比例上运行。
【解决方案2】:

在调试器中设置NSZombieEnabledMallocStackLoggingguard malloc。然后,当您的应用崩溃时,在 gdb 控制台中输入以下内容:

(gdb) info malloc-history 0x543216

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

【讨论】:

    【解决方案3】:

    您是否有一两个可以发布的崩溃日志?那会很有帮助。

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

    【讨论】:

    • 添加了崩溃的gdb输出
    • @bbum - 这是 iOS 5 中引入的 Apple 错误。我已提交错误报告。请参阅我对 OP 问题的回答。
    • 优秀。感谢提交。
    【解决方案4】:

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

    【讨论】:

    • 你能扩展这个答案吗?你是如何改变你的代码的?我在 iOS 5 中遇到了同样的问题。
    • 我认为原因很随意——有些东西在 iOS 5 中似乎有冲突——但我所做的是将一些 CAKeyframeAnimation 的东西更改为动画块。
    • 是的,我的崩溃也涉及 CAAnimation。但它并没有在以前的系统中崩溃。我确实发现我可以通过使用动画块来解决它,但我不想这样做。奇怪的是,解决方案是在addAnimation:forKey: 中使用零键。 - 感谢您确认。
    猜你喜欢
    • 2023-03-03
    • 2011-09-28
    • 1970-01-01
    • 2016-04-25
    • 2011-10-29
    • 2014-12-01
    • 2016-06-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多