未知的崩溃,没有如此丰富的堆栈跟踪(iOS)

时间:2012-06-05 12:00:22

标签: objective-c xcode

我们制作了一个崩溃记录系统,记录所有崩溃并让服务器存储它们。我们遇到了很多崩溃,但我们不知道是什么导致了崩溃。游戏运行了几个月,我们从未在游戏运行时看到任何这些崩溃(调试,开发阶段等)。

奇怪的是,我们收到了很多这些错误。我尝试在代码中查看它们,但似乎它们都没问题。如果他们不是,它应该马上崩溃。

我们唯一得到的是堆栈跟踪,但信息量不大。我们无法从堆栈跟踪中获得任何线索,因为它在我们的代码中不包含任何内容。

我想知道为什么会发生这种崩溃,以及为什么它只给我这个堆栈跟踪。我在下面发布了崩溃日志。感谢。

+++++++++++++++++++++++++++++++++++++++++++
#1 - Mutating method sent to immutable object (Dictionary)

-[__NSCFDictionary removeObjectForKey:]: mutating method sent to immutable object
(

    \4   libc++abi.dylib                     0x30e093c5 _ZL19safe_handler_callerPFvvE + 76\"
    \"5   libc++abi.dylib                     0x30e09451 _ZdlPv + 0\"
    \"6   libc++abi.dylib                     0x30e0a825 __cxa_current_exception_type + 0\"
    \"7   libobjc.A.dylib                     0x3687d2a9 objc_exception_rethrow + 12\"
    \"8   CoreFoundation                      0x353ac50d CFRunLoopRunSpecific + 404\"
};

+++++++++++++++++++++++++++++++++++++++++++
#2 - Inserting nil object in array


*** -[__NSArrayM insertObject:atIndex:]: object cannot be nil
(

    \4   libc++abi.dylib                     0x380eb3c5 _ZL19safe_handler_callerPFvvE + 76\"
    \"5   libc++abi.dylib                     0x353e5451 _ZdlPv + 0\"
    \"6   libc++abi.dylib                     0x353e6825 __cxa_current_exception_type + 0\"
    \"7   libobjc.A.dylib                     0x35d1b2a9 objc_exception_rethrow + 12\"
    \"8   CoreFoundation                      0x3776b50d CFRunLoopRunSpecific + 404\"
};


+++++++++++++++++++++++++++++++++++++++++++
#3 - Array out of bounds

*** -[__NSArrayI objectAtIndex:]: index 1 beyond bounds [0 .. 0]
(

    \4   libc++abi.dylib                     0x353e53c5 _ZL19safe_handler_callerPFvvE + 76\"
    \"5   libc++abi.dylib                     0x353e5451 _ZdlPv + 0\"
    \"6   libc++abi.dylib                     0x353e6825 __cxa_current_exception_type + 0\"
    \"7   libobjc.A.dylib                     0x35d1b2a9 objc_exception_rethrow + 12\"
    \"8   CoreFoundation                      0x3776b50d CFRunLoopRunSpecific + 404\"
};

1 个答案:

答案 0 :(得分:2)

它看起来像一个无法使用的Objective-C异常,它被运行循环重新抛出并最终调用terminate。这会丢失堆栈回溯信息。

您如何记录应用程序崩溃?我假设您没有使用NSSetUncaughtExceptionHandler注册自己的异常处理程序?这将允许您检查堆栈以找到问题的真正原因。有一些脚本来表示堆栈转储 - 请查看Apple文档以获取详细信息。

这是一个非常类似的问题: