【问题标题】:Hard-to-reproduce crash does not appear in HockeyApp or Device Logs难以重现的崩溃不会出现在 HockeyApp 或设备日志中
【发布时间】:2014-08-22 13:20:07
【问题描述】:

两天前,我的一位 iPhone 游戏 Beta 版测试人员在游戏的某个特定点遇到了崩溃。 HockeyApp 中没有出现任何崩溃报告(我看到过来自同一版本的其他报告)。

昨晚,我也经历了坠机。不幸的是,我没有连接到调试器。当我回到电脑前,我插入了我的设备,但没有发现新的崩溃日志。请注意,我的设备是 iOS8 Beta,我尝试同时使用 XCode5 和 XCode6 来查找崩溃日志。

这种崩溃极难重现;在 30 多个小时的综合游戏中,它只发生了这 3 次。这不是内存问题;崩溃发生在游戏过程中的一个非常特定的点,重新启动应用程序会导致另一个非常具体的症状......只是不够具体,我无法调试;)

我以前读过有关 HockeyApp 等捕获崩溃日志的方式,但我必须承认缺乏专业知识。什么会导致日志像这样丢失? HockeyApp 是否以某种方式“消耗”了它,或者它根本就没有被创建?

更重要的是,我该如何追踪问题?

【问题讨论】:

    标签: ios iphone xcode hockeyapp


    【解决方案1】:

    我是 HockeyApp 的 Andreas。

    让我从一些一般性评论开始:

    1. 如果发生崩溃或 iOS 终止应用程序(从技术上讲这不是崩溃),那么 iOS 将始终将崩溃报告写入设备,但有一个例外:如果设备被拒绝同步Apple 的使用情况和崩溃数据,它只会存储有限数量的报告,然后只会在控制台中打印报告。

    2. 第 3 方框架永远不会“消耗”崩溃,因此 iOS 将无法生成报告。一个应用中的多个第三方框架可以检测到未处理的异常,但只有一个框架可以检测到由信号触发的崩溃。

    3. 具有默认设置的 HockeyApp SDK 无法检测崩溃,例如堆栈溢出引起的。这可以通过启用 Mach Exceptions 来激活,请参阅 http://hockeyapp.net/help/sdk/ios/3.5.6/Classes/BITCrashManager.html#//api/name/enableMachExceptionHandler

    4. HockeyApp SDK 具有实验性支持,可检测 iOS 对应用程序的某种终止。这也需要单独激活,见https://github.com/bitstadium/HockeySDK-iOS/blob/develop/Classes/BITCrashManager.h#L224

    如果没有 iOS 崩溃报告,就无法说明 HockeyApp 无法报告崩溃的原因。我对 iOS 没有在设备上显示崩溃报告的假设是设备上已经有太多的崩溃报告并且同步被禁用。

    1. 将设备连接到 Xcode
    2. 选择设备并再次检查设备上的崩溃报告。
    3. 模拟新的崩溃
    4. 再次检查是否将存储在设备上。
    5. 检查控制台日志是否有内容。
    6. 如果假设正确,请从设备中删除旧的崩溃报告,以便为新报告腾出空间。
    7. 一旦您获得了该崩溃的报告,请抓住该报告并通过支持部门与我们联系,以便我们帮助您进行分析。

    【讨论】:

    • 谢谢!我通过CFRelease(NULL); 模拟了一次崩溃并收到了正确的崩溃报告。昨晚的崩溃仍然不在设备日志中,但这次崩溃是。所以肯定有空间,并且肯定会生成日志。我想我会根据您的建议尝试启用 #3 和 #4...
    • 我非常怀疑任何 3rd 方 SDK 是否能够在 iOS 不提供任何内容时提供报告。当问题再次出现时,除了检查报告之外,您还应该立即检查控制台输出是否有任何可疑之处。
    • 伙计,这很粗糙 :( 不过我想这没什么可做的。
    猜你喜欢
    • 1970-01-01
    • 2012-12-25
    • 2016-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-10
    相关资源
    最近更新 更多