次のクラッシュレポートで立ち往生しています:
Date/Time: 2013-09-12 22:39:54 +0000
OS Version: iPhone OS 6.1.3 (10B329)
Report Version: 104
Exception Type: SIGSEGV
Exception Codes: SEGV_ACCERR at 0xa0000008
Crashed Thread: 0
Thread 0 Crashed:
0 libobjc.A.dylib 0x39a3c564 _cache_getImp + 4
1 libobjc.A.dylib 0x39a3e1d7 class_respondsToSelector + 31
2 CoreFoundation 0x31b96605 objectIsKindOfClass + 37
3 CoreFoundation 0x31b9635d __handleUncaughtException + 69
4 libobjc.A.dylib 0x39a41a65 _objc_terminate() + 129
5 libc++abi.dylib 0x3948e07b safe_handler_caller(void (*)()) + 79
6 libc++abi.dylib 0x3948e114 std::terminate() + 20
7 libc++abi.dylib 0x3948f599 __cxa_current_exception_type + 1
8 libobjc.A.dylib 0x39a419d1 objc_exception_rethrow + 13
9 CoreFoundation 0x31adcf21 CFRunLoopRunSpecific + 457
10 CoreFoundation 0x31adcd49 CFRunLoopRunInMode + 105
11 GraphicsServices 0x356a82eb GSEventRunModal + 75
12 UIKit 0x339f2301 UIApplicationMain + 1121
13 Our App 0x0003bc27 main (main.m:15)
このエラーの原因となっているバグを修正するためのさまざまな試みの後、PLCrashReporter から (ベータ テスターからのアドホック ビルドから) このクラッシュログを何度も受け取り続けています。さまざまな例外コードは、SIGSEGV/SEGV_ACCERR から SIGBUS/BUS_ADRALN、EXC_BAD_ACCESS/KERN_INVALID_ADDRESS までさまざまです。
iOS (armv7 および armv7s) でRapidjson ライブラリを使用しており、こちら (#8)で説明されているようにパディングを修正し、objective-c ランタイム関数を使用してランタイムにメソッドの実装を追加していますclass_addMethod
(
私たちのコードベースは、一部の Obj-C++ と一部の C コードを含むほとんどの Objective-C コードで構成されています。手動で処理される Obj-C++ および C 部分を除いて、メモリ管理は ARC によって行われます。すべての malloc/free 呼び出しを調査し、libgmalloc を広範囲に使用してメモリの問題を特定しましたが、正しくないと思われるものは何もありません。
デバッグ モードまたはリリース モードではなく、このクラッシュ ログを自分で再現することはできませんが、ベータ テスターからこのクラッシュ ログが時々 (約 50 回の実行に 1 回) 送られてきます。私たちの製品は (できれば) すぐに多くの iOS デバイスで動作するようになるため、これは壊れたままにしておくことはできません。
多くのメモリ管理の記事を読んだ後、この問題はメモリの配置が悪いことが原因であると思われます。したがって、rapidjson がこのバグの原因であると思われます。iOS / armv7 でのメモリ アラインメントに関する知識が不足しているため、このクラッシュログを修正できません。誰かがiOSでこの件についてもっと説明してもらえますか? それとも、間違った場所を探していますか?これは別のメモリの問題ですか? 誰かが私を正しい方向に向けてくれることを願っています。
さらに情報が必要な場合は、喜んで提供します。注:JSONKitまたは別のライブラリを使用してrapidjsonを置き換えるため、回答を探しているわけではありません。ありがとう :)