【问题标题】:Unable to understand crash report无法理解崩溃报告
【发布时间】:2014-07-12 14:23:44
【问题描述】:

任何人都可以帮助我理解这个崩溃日志。 这次崩溃似乎是偶然的,我无法在我的测试设备上重现它。 谢谢

Thread : Fatal Exception: NSInvalidArgumentException
0  CoreFoundation                 0x2faa6f0b __exceptionPreprocess + 130
1  libobjc.A.dylib                0x3a56dce7 objc_exception_throw + 38
2  CoreFoundation                 0x2faaa837 -[NSObject(NSObject) doesNotRecognizeSelector:] + 202
3  CoreFoundation                 0x2faa9137 ___forwarding___ + 706
4  CoreFoundation                 0x2f9f8098 _CF_forwarding_prep_0 + 24
5  UIKit                          0x322e58b7 -[UILabel _shadow] + 38
6  UIKit                          0x32355557 -[UILabel drawTextInRect:] + 66
7  UIKit                          0x3235550b -[UILabel drawRect:] + 78
8  UIKit                          0x323554a9 -[UIView(CALayerDelegate) drawLayer:inContext:] + 372
9  QuartzCore                     0x31f81189 -[CALayer drawInContext:] + 100
10 QuartzCore                     0x31f6ac5b CABackingStoreUpdate_ + 1858
11 QuartzCore                     0x32046c1d ___ZN2CA5Layer8display_Ev_block_invoke + 52
12 QuartzCore                     0x31f6a50b x_blame_allocations + 82
13 QuartzCore                     0x31f6a1bf CA::Layer::display_() + 1118
14 QuartzCore                     0x31f4dd41 CA::Layer::display_if_needed(CA::Transaction*) + 208
15 QuartzCore                     0x31f4d9d9 CA::Layer::layout_and_display_if_needed(CA::Transaction*) + 24
16 QuartzCore                     0x31f4d3e5 CA::Context::commit_transaction(CA::Transaction*) + 228
17 QuartzCore                     0x31f4d1f7 CA::Transaction::commit() + 314
18 QuartzCore                     0x31f46f1d CA::Transaction::observer_callback(__CFRunLoopObserver*, unsigned long, void*) + 56
19 CoreFoundation                 0x2fa72039 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__
20 CoreFoundation                 0x2fa6f9c7 __CFRunLoopDoObservers
21 CoreFoundation                 0x2fa6fd13 __CFRunLoopRun + 738
22 CoreFoundation                 0x2f9da769 CFRunLoopRunSpecific + 524
23 CoreFoundation                 0x2f9da54b CFRunLoopRunInMode + 106
24 GraphicsServices               0x349046d3 GSEventRunModal + 138
25 UIKit                          0x32339891 UIApplicationMain + 1136
26 Oremia Mobile HD               0x00110ee7 main (main.mm:16)
27 libdyld.dylib                  0x3aa6bab7 start + 2

【问题讨论】:

  • 也许 UI 是从某处的后台线程更新的?根据回溯真的很难说。
  • 异常信息是什么? UILabel 的文本来自哪里:静态字符串、JSON 数据、...?
  • 完整的回溯在这里crashes.to/s/721fcce12a6
  • 第二个问题呢?

标签: ios objective-c crashlytics


【解决方案1】:

这只是一个猜测,因为没有足够的信息来说明你在代码中做了什么。无论如何,从后面的跟踪中我可以假设您从某个地方接收/获取一些数据,然后您解析接收到的数据并尝试在视图中呈现它。您传递给视图的对象具有您分配给标签的某些属性,顺便提一下,该属性包含NSNull 对象,而不是应传递给UILabel 的有效NSString/NSAttributed 字符串。因此,当UILabelNSNull 发送length 消息时,您会收到崩溃。

因此,您可能为未收到或为空的属性设置了 NSNull。

尝试在设置视图数据的位置设置断点并查看是否有任何属性具有NSNull 而不是有效字符串。

【讨论】:

    【解决方案2】:

    你在某个地方调用 length 方法到没有这个方法的 NSNull 对象。

    -[NSNull 长度]:无法识别的选择器发送到实例 0x3ad30a60

    【讨论】:

    • 是什么让你这么认为?回溯中没有类似的东西
    • crashes.to/s/721fcce12a6(我认为,您将 NSNull 设置为 UILabel 文本属性...但我不确定)
    • 那么这可能意味着一个被释放的NSString对象被发送了一个length消息
    • 不,释放的 NSString - 为 nil,但我们看到 [NSNull length]... 所以我们向 NSNull 实例发送长度消息。
    • @Igor 不。当一个对象被释放时,它的指针开始指向一个可以是任何东西的随机内存块(例如NSArray的中间),并且操作系统会尽可能地解释它。你见过像[__NSCFArray length]: USSTI 0xdeadbeef 这样的崩溃吗?当然,ARC 会尝试将所有已释放的对象清零,但有时它会“失败”(显然是因为编码器的错误)。
    【解决方案3】:

    由于无效数据在此drawTextInRect方法中传递而发生崩溃,只需放置断点并检查。如果仍然无法正常工作,请在 xcode 设置中启用 NSZombie,然后检查控制台日志。

    【讨论】:

      【解决方案4】:

      看起来您已将标签的文本(似乎来自某些网络服务)设置为 [NSNull null]。检查响应并在为该标签设置文本之前放置一个断点并查看您实际尝试设置的内容。这可能在某些用作观察者回调的方法中。

      【讨论】:

        猜你喜欢
        • 2012-03-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多