2

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

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

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

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

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

4

1 回答 1

8

这是来自 HockeyApp 的 Andreas。

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

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

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

  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. 一旦您获得该崩溃的报告,请抓住该报告并通过支持与我们联系,以便我们帮助您分析它。
于 2014-08-22T13:50:31.183 回答