エラーを受け取りました
EXC_BAD_ACCESS code = 2 at0xb0987654
0xb0987654の値を印刷する方法を知りたいですか?
EXC_BAD_ACCESSをデバッグするには、通常、ゾンビオブジェクトを有効にすることで、ダングリングポインターの場所を見つけることができます。
Xcode
編集スキームを選択し、[実行]セクションの[診断]タブを選択して、[ゾンビオブジェクト]オプションをクリックします。
AppCode
編集対象を選択し、次の環境変数を追加します。
NSZombieEnabled=YES
EXC_BAD_ACCESSの別の原因として、無限再帰があります。これは、ロギングを追加することで見つけることができます。
C++の更新:
ClangコンパイラでC++のダングリングポインターをデバッグするには、Googleの Address Sanitizer(ASAN) を使用してみてください。
コードページなどに書き込もうとしているように見えますか? EXC_BAD_ACCESSは、/ usr/include/mach/exception_types.hで説明されています。
#define EXC_BAD_ACCESS 1 /* Could not access memory */
/* Code contains kern_return_t describing error. */
/* Subcode contains bad memory address. */
そして、kern_return.hから:
#define KERN_PROTECTION_FAILURE 2
/* Specified memory is valid, but does not permit the
* required forms of access.
*/
次のようにすると、バイナリ内のアドレスがどこにあるかを確認できます。
(lldb) image lookup -va 0xb0987654
しかし、あなたが本当に理解する必要があるのは、誰がそこに書き込もうとしているのかです。問題が単純な場合、これは何が悪いのかを教えてくれるかもしれませんが、Jasperが示唆するように、これはおそらく解放後の使用などの問題です。 guardmallocは、この種のエラーをキャッチすることもあります(RunスキームのXcodeでこれを有効にできます)。
クラッシュを引き起こした原因を特定します。特定のView ControllerのビューがdidLoad中、デリゲートメソッド内、または特定のアクションでクラッシュしましたか。多くの場合、エラーの原因となっているオブジェクトを見つけるのに役立ちます。
これがお役に立てば幸いです。
よろしく、ギソン