私の知る限り、EXC_BAD_ACCESSは、不良メモリにアクセスしようとすると発生します(間違っている場合は、遠慮なく修正してください)。
アプリ全体の失敗を防ぐために、Java
のtry-catch
のようにそれをキャッチする方法はありますか?
いいえ、 EXC_BAD_ACCESS
は、物事がレールから大きく外れたことを意味します。プログラムが無効なメモリアドレスにアクセスしようとしています。つまりメモリが破損しており、予測可能な回復はありません。
メモリ管理の問題である可能性があります。問題を再現できる場合は、NSZombiesをオンにして、何が起こるかを確認してください。または、ここにバックトレースを投稿してください。
Try-catchスタイルの例外は、iOS/Cocoaでも回復できないことに注意してください。例外は、回復可能なエラー処理には使用されません。それがNSErrorの目的です。
シグナルハンドラを使用して、時々main
でキャッチできます。ただし、ログに記録する以外は、多くのことを行うことはできません。
トライキャッチを使用できますが、最初に問題の原因を知る必要があります。現在のビルドでNSZombieを有効にして、エラーをキャッチし、必要をなくすことができます。現在のスキームを編集し、NSZombieを有効にします。
新しいCライブラリ SignalRecovery は、プログラムがEXC_BAD_ACCESS
などのオペレーティングシステムの例外から回復できるようにします。 IOS/MacOS/Linux
で使用できます。
サンプルコード:
signal_try(label) {
// Add your code need try.
int* ptr = NULL;
*ptr = 0;
}
signal_catch(label) {
// Add your code to process exceptions, or do nothing.
siginfo_t* info = signal_info();
}
signal_end(label)
// Continue run