用于查找导致游戏冻结的位置和错误的调试方法



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

Jeremy在调试器中停止的建议是一个很好的建议。

有一个非常快速的方法来调查冻结(或任何性能问题),特别是当它不容易重现时。你必须有一个终端在手(所以你需要在iOS模拟器或Mac OS X上运行,而不是在iOS设备上)。

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

<>之前样本YourProgramName之前

(如果您的程序名称中有空格,请将其括在引号中,如sample "My Awesome Game"。)sample的输出是一个日志,显示您的程序在哪里花费了时间,如果您的程序实际上挂起了,那么很明显哪些函数被卡住了。

我不同意Aaron Golden上面的回答,因为在设备上运行是非常有用的,以便有一个应用程序冻结的真实情况。模拟器有更多的内存,并且不能以准确的方式再现设备的硬件(例如,帧速率在某些情况下较低)。

"显然",你需要在Xcode上连接你的设备(带有开发者配置文件),并查看控制台终端以查找用户@ aaronggolden建议的痕迹。

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

当我开始学习Cocos2D时,我的应用经常冻结。以下是常见原因的列表:

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

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

最新更新