SEGV_ACCERRの理由でシグナルSIGSEGVを持ついくつかのクラッシュを調べています。 SEGV_ACCERRを検索した後、人間が読み取れる説明に最も近いのは次のとおりです。オブジェクトの無効なアクセス許可
これはより一般的な意味で何を意味しますか? SEGV_ACCERRはいつ発生しますか?この理由に関するより具体的なドキュメントはありますか?
これは主に64ビットiOSデバイスで見たエラーであり、複数のスレッドがARCで変数を読み取って変更すると発生する可能性があります。たとえば、複数のバックグラウンドスレッドが静的なNSDateおよびNSString変数を読み取って使用し、ロックやキューイングを一切行わずに更新するクラッシュを今日修正しました。
クラッシュログで何度も見たように、複数のスレッドでコアデータオブジェクトを使用すると、このクラッシュが発生する可能性もあります。
私もCrittercismを使用していますが、この特定のクラッシュはSEGV_ACCERRで、64ビットデバイスのみに影響しました。
sigactionのマニュアルページに記載されているように、SEGV_ACCERRは、マッピングされたオブジェクトの無効な許可を指定するSIGSEGVのシグナルコードです。 SEGV_MAPERRとは異なり、アドレスが有効なオブジェクトにマッピングされていないことを意味し、SEGV_ACCERRはアドレスがオブジェクトに一致することを意味しますが、確かにそれは良いアドレスでもプロセスがアクセスできるアドレスでもありません。
これは、コードが「テキスト」以外の場所から実行しようとする場合に見られます。
たとえば、ポインターがヒープまたはスタック内の関数を指しており、そのコードを(ヒープまたはスタックから)実行しようとすると、CPUはこの例外をスローします。