web-dev-qa-db-ja.com

エラーまたはスタックトレースなしのiOSクラッシュ

IPadアプリケーションのクラッシュを追跡するのに苦労しています。問題は、アプリケーションに障害が発生したときにエラーやスタックトレースが存在しないことに起因しています。それは単にカイザー・ソーズのように消えていく、「そして、そのように、そのとおり。彼はなくなった」。

クラッシュをシミュレーターとデバイスの両方で再現しました。デバイスログはゼロ、コンソールには何もないなど.

クラッシュ中、一部のCoreGraphics操作がバックグラウンドスレッドで発生していることを知っています。通常、3つほどのNSOperationsがいくつかの画像のブレンドを開始します。

ブレンドは、CGContext *呼び出し(DrawImage、SetBlendMode、SetAlphaなど)で構成されています。 NSOperationは、メインスレッドのデリゲートを呼び出して画像を処理し、それをUIImageに設定するので、UIメインスレッドの競合になることはありませんが、この時点では何も割引していません。

何が起こっているのか正確に追跡するために欠けているXcodeのトリックはありますか?または、少なくとも問題がどこにあるのかについてより良いヒントを得ますか?

[〜#〜] edit [〜#〜]アプリをInstrumentsで実行してメモリ使用量を追跡しましたが、2MB前後でかなり安定していることがわかります。だから、それはメモリの問題だとは思わないでください。しかし、検討した結果、この安定した2MBは異常に低いようです。 InstrumentsがCoreGraphicsの割り当てを取得していない可能性はありますか?

36
MarkPowell

より良い解決策がないため、そしてそれが明らかでない場合は、NSLogを使用してアプリにペッパーを適用し、これが発生する場所を一周してから、ブレークポイントや追加のログを介してそこからさらにドリルダウンします。

10
fzwo

レジスタを読み取ってみてください。

私のアプリがエラーなしでクラッシュするときはいつでも、ほとんどの場合、私はレジスターで例外を見つけました。

最初に[例外]タブに移動し、左下隅にある+を使用して[例外ブレークポイントを追加]します。 enter image description here

次に、アプリがクラッシュしたら、スレッド1の下の「0 objc_exception_throw」をクリックします。 enter image description here

最後に、コンソールで次のように入力します。

  • レジスター読み取り(レジスターのリストを取得する必要があります)
  • po $ rax(通常、例外は「rax」にあります)

    (コンソールに例外出力が表示されるはずです)

お役に立てれば。

27
shrishaster

非常に遅い回答ですが、try/catchを使用すると、スタックトレースを取得できず、アプリケーションがKeizer Sozeをプルするときに情報を提供できることがわかりました。

@try
{
  // suspected code causing crash/errors
}
@catch (NSException *exception)
{
  NSLog(@"Exception: %@", exception);
}
2
dragonflyesque

私の場合、それは問題を見つけるのを助けるためにスキームで「ゾンビオブジェクト」を有効にしていたためでした、それは最終的にそれがメモリを使い果たしてクラッシュする原因になりました。

1
Paul Slocum

私の場合、ストーリーボードのコンセントの接続が悪いことが原因でした。ロードするviewDidLoadUIViewControllerメソッドが呼び出された場合、ブレークポイントを使用して確認します。そうでない場合は、ストーリーボードでコンセントの接続を確認してください。

誤った接続は、エラーやスタックトレースなしでアプリをクラッシュさせます。

以前のバージョンのXCodeで表示されていたthis class is not key value coding-compliant for the keyエラーはどうなったのでしょうか。

1
brainforked

私の場合、オブジェクトが解放されたことが原因でした。通常、メッセージは割り当て解除されたインスタンスなどに送信されたと表示されますが、送信されませんでした。 iPhoneのログを確認したところ、KERN_INVALID_ADDRESSが見つかりました。これは、グーグル検索してこれに遭遇しました: KERN_INVALID_ADDRESS

ゾンビオブジェクトを有効にして、割り当て解除されたインスタンスを使用しようとした。また、後でログに記録されたオブジェクトも教えてくれました。

それが将来の訪問者に役立つことを願っています。

0
chrs