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

时间:2013-04-19 19:47:37

标签: cocoa-touch debugging cocos2d-iphone

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

2 个答案:

答案 0 :(得分:8)

Jeremy's suggestion在调试器中停止是一个很好的。

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

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

sample YourProgramName

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

答案 1 :(得分:1)

我不同意上面的Aaron Golden's answer因为在设备上运行非常有用,以便有一个应用程序冻结的实际场景。模拟器具有更多内存, 无法以精确方式再现设备的硬件(例如,帧速率在某些情况下更低)。

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

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

当我开始学习Cocos2D时,我的应用程序经常会出现问题。这是常见原因列表:

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

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