2013-04-19 7 views
7

最近私は理解できないエラーに遭遇しました。私がCocos2Dを使用して開発しているゲームは、あるランダムな点でフリーズします。それはSIGSTOPを取得します。理由を見つけることができません。エラーの発生場所とその原因を調べるために、どのツールを使用できますか(どのように使用すればよいですか)。ゲームがフリーズする原因となる場所とエラーを見つけるためのデバッグ方法

+2

デバッガの一時停止ボタンを押して、デッドロックの可能性があるかどうかを確認します。 – Jeremy

答えて

8

Jeremy's suggestionデバッガで停止するのは良い方法です。

特に簡単に再生できない場合は、フリーズ(またはパフォーマンスの問題)を調査するための非常に迅速な方法があります。便利な端末を用意する必要があります(iOSデバイスではなく、iOSシミュレータまたはMac OS Xで実行する必要があります)。ハングが端末にポップオーバーが発生し、実行

:(。あなたのプログラム名ラップにスペースsample "My Awesome Game"のような引用符でそれがある場合)

 
sample YourProgramName 

sampleの出力はあなたを示すログですプログラムが時間を費やしていて、あなたのプログラムが実際にハングアップしているのであれば、どの機能が止まっているのかははっきりしています。

+0

ああ、本当にありがとう、私はこれを試してみます。私はまだエラーを再現しようとしていますが、あなたが言ったことから再び発生します。 もう一度、ありがとうございました! – Allan

+1

私はあなたが言うことをして、問題を見つけました。私の方法の1つにループがありますが、私が一時停止したときにはそれが指摘していないdebbugerがあり、エラーを見つけるのが難しくなりました。 ありがとうございました! – Allan

1

上記のAaron Golden's answerとデバイスでの実行は、アプリがフリーズする実際のシナリオを持つためには非常に便利です。シミュレータにメモリがあり、の場合は正確な方法でデバイスのハードウェアを再現しません(たとえば、フレームレートが一定以下の場合など)。

「明らかに」デバイス(開発者プロファイル付き)をXcodeに接続し、コンソール端末で@AaronGoldenが提案したトレースを探す必要があります。

これらが十分でない場合、Xcodeで一般的な例外ブレークポイントを有効にして、より多くのスタックトレースメッセージをキャプチャできます。

私はCocos2Dの学習を始めたときに、自分のアプリが頻繁にフリーズします。これは、一般的な原因のリストです:

  • 私はスプライトシートを使用していなかったので、フレームレートは、私はあまりにも多くのメモリ(あまりにも多くの高精細スプライトを使用していたdrammatically
  • を落としたを見てください。 TexturePackerとpvr.cczまたはpvr.gz形式を使用します。それは半分にメモリ割り当てをカット)

を使用instrumentsメモリの警告のためにアプリをプロファイリングするために(例えば、割り当ての楽器を見て、メモリの警告を探してください)。

+0

なぜ私の名前を恐怖の引用符に入れましたか? とにかく、OPは要求に応じて問題を再現することができないと思われます。そして、バグ*この*時間を打ち負かすような場合に備えて、毎回楽器で実行するのが楽しいかもしれません。だから、私はちょうどターミナルに切り替えてサンプルを実行する準備ができていると言いました。 OP *が問題を確実に再現できる場合は、Instrumentsは適切な方法ですが、なぜ割り振りツールを提案しましたか?確かに、時間プロファイラーは、一般的なハング/スローネスの問題に最も適したツールです。 –

+0

私はあなたが言うように、すべてのスプライト(pvr.ccz)にテクスチャパッカーを使用します。あなたが言ったことを試してみよう!返信ありがとう、本当にそれを感謝します。 – Allan

+0

アプリケーションがフリーズすると、「システムの過負荷」が原因でメモリ割り当てが影響を受ける可能性がありますが、間違っている可能性があると考えられます。 – mm24

関連する問題