【问题标题】:How interpret stack traces when it stops on main当它在 main 上停止时如何解释堆栈跟踪
【发布时间】:2012-01-31 23:16:08
【问题描述】:

我经常得到这样的堆栈跟踪:

0 StackAsk 0x0007fc0d +[TFCrashHandler 回溯] + 429 1 StackAsk 0x0007fe4b TFHandleExceptions + 35 2 核心基础 0x33d56987 __handleUncaughtException + 74 3 libobjc.A.dylib 0x3583d2d1 _objc_terminate + 128 4 libc++abi.dylib 0x34a763c5 _ZL19safe_handler_callerPFvvE + 76 5 libc++abi.dylib 0x34a76451 _ZdlPv + 0 6 libc++abi.dylib 0x34a77825 __cxa_current_exception_type + 0 7 libobjc.A.dylib 0x3583d235 objc_exception_rethrow + 12 8 核心基础 0x33cac53d CFRunLoopRunSpecific + 404 9 核心基础 0x33cac39d CFRunLoopRunInMode + 104 10 图形服务 0x34f93439 GSEventRunModal + 136 11 UIKit 0x317a39f1 UIApplicationMain + 1080 12 StackAsk 0x0002c1c1 主 (main.m:16) 13 StackAsk 0x0002c150 开始 + 40

(此日志来自测试人员,使用 TestFlightApp.com)

当我在测试时发生这种情况时,调试器会在 main 函数上停止。

给出的异常原因是:

*** -[__NSArrayM objectAtIndex:]:索引 17 超出范围 [0 .. 16]

我自己无法复制崩溃,使用 Release 或 Debug 构建配置没有区别。我可以做些什么来获取异常实际发生的位置?

【问题讨论】:

  • 你试过在objc_exception_throw上破解吗?
  • 问题是它来自测试人员,而不是我自己,我无法复制它。所以我不能设置断点,因为没有调试它。

标签: objective-c exception


【解决方案1】:

要求测试人员检查 iOS 生成的崩溃报告,该报告将包含最后一个异常回溯,您可以对其进行符号化,然后查看它发生在哪里。

还有其他的崩溃报告框架和服务可以做到这一点,HockeyApp 和 QuincyKit(注意:我都参与其中)。这些正在使用 PLCrashReporter,它还可以跟踪最后的异常回溯,并且在 App Store 中也可以安全使用。

【讨论】:

    猜你喜欢
    • 2013-09-10
    • 2012-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-21
    • 2014-10-07
    • 1970-01-01
    相关资源
    最近更新 更多