【问题标题】:Debugging methods for finding the location and error that's causing a game to freeze查找导致游戏冻结的位置和错误的调试方法
【发布时间】:2013-04-13 07:24:58
【问题描述】:

我最近遇到了一个我无法理解的错误。我正在使用 Cocos2D 开发的游戏只是在某个随机点冻结——它得到一个 SIGSTOP——我找不到原因。我可以使用什么工具(以及如何使用它)来找出错误发生的位置和原因?

【问题讨论】:

  • 点击调试器中的暂停按钮,看看它是否为您提供了可能出现死锁的位置。

标签: cocoa-touch debugging cocos2d-iphone


【解决方案1】:

Jeremy's suggestion 在调试器中停止是一个不错的选择。

有一种非常快速的方法可以调查冻结(或任何性能问题),尤其是当它不容易重现时。您必须有一个方便的终端(因此您需要在 iOS 模拟器或 Mac OS X 上运行,而不是在 iOS 设备上运行)。

当挂起时弹出到终端并运行:

示例 YourProgramName

(如果您的程序名称中有空格,请用引号括起来,如sample "My Awesome Game"。)sample 的输出是一个日志,显示您的程序花费时间的位置,如果您的程序实际挂起,它将是很明显哪些功能被卡住了。

【讨论】:

  • 哦,非常感谢您的回答,我试试这个。我仍在尝试重现该错误,但根据您所说的,它再次发生。再次感谢您的回答!
  • 我按照你说的做了,我发现了问题。我的一个方法中有一个循环,但奇怪的是当我暂停时调试器没有指向它,这使得很难找到错误。谢谢你的一切!
【解决方案2】:

我不同意上面的Aaron Golden's answer,因为在设备上运行对于获得应用程序冻结的真实情况非常有用。模拟器有更多内存,没有以准确的方式再现设备的硬件(例如,帧速率在某些情况下较低)。

“显然”,您需要在Xcode 上连接您的设备(使用开发者配置文件)并查看控制台终端以查找用户@AaronGolden 建议的跟踪。

如果这些还不够,您可能希望在 Xcode 中启用通用异常断点来捕获更多堆栈跟踪消息。

当我开始学习 Cocos2D 时,我的应用程序经常死机。这是常见原因的列表:

  • 我没有使用精灵表,因此帧速率急剧下降
  • 我使用了太多内存(太多高清精灵。看看TexturePacker 并使用 pvr.ccz 或 pvr.gz 格式;它将内存分配减少了一半)

使用instruments 分析您的应用程序是否存在内存警告(例如,查看分配工具并查找内存警告)。

【讨论】:

  • 你为什么把我的名字放在吓人的引号里?无论如何,问题似乎是 OP 无法按需重现该问题,并且每次使用仪器运行都可能会令人沮丧,以防万一您碰巧在 this 时遇到错误。这就是为什么我说准备好切换到终端并运行示例。如果 OP 可以 可靠地重现该问题,那么 Instruments 是正确的方法,但您为什么建议使用分配工具?当然,时间分析器是解决一般挂起/缓慢问题最适用的工具。
  • 我按照你说的做,对我所有的精灵使用纹理打包器(pvr.ccz)。我会试试你说的!感谢您的回复,非常感谢。
  • 如果应用程序冻结可能是由于某些“系统过载”并认为内存分配可能会影响,但可能是错误的
  • 但是没有掉帧。
  • 是的,对不起,我也是新手,所以听听@AaronGolden 之类的人在这个论坛上的看法。他们有更多的知识和经验:),抱歉误导。
猜你喜欢
  • 1970-01-01
  • 2018-03-30
  • 2013-12-15
  • 2016-12-04
  • 1970-01-01
  • 2017-10-12
  • 1970-01-01
  • 1970-01-01
  • 2020-07-23
相关资源
最近更新 更多