忍者ブログ

佐崎司と愉快な仲間達

ゲーム、アニメ、CG、iOS開発など思いついたことを記事にしています。 管理人が3人いますので、記事にまとまりはないと思います。 iPhoneアプリのレビュー依頼も受け付けています。

UIApplicationMainでEXC_BAD_ACCESS発生時の原因調査方法について

わか

iOSのEXC_BAD_ACCESSには毎度悩まされます。特にUIApplicationMainで発生した場合、どこで問題が発生したか分かりません。そんな時に使用する原因調査方法について記載します。

Xcode6.3

1. 環境変数を設定する
 「メニュー 」「Product」「Schme」「Edit Scheme」でスキーマ編集画面を表示させる 。
 左側のRunを選択し、Environment Variablesに以下の変数を追加する
 ・NSZombieEnabled YES    (ゾンビオブジェクトを例外で通知する)
 ・NSDebugEnabled YES      (Foundationクラスのデバッグ情報が追加される)
 ・MallocStackLogging YES  (メモリアロケーションを記録する)


2. 不具合を再度発生させる(Run)
 不具合を発生させると、以前よりもコンソールに表示されるデバッグ情報が増えています。
 例: *** -[UIDocument _setInConflict:]: message sent to deallocated instance 0x1722d7c0
 

3. コンソールにてメモリ履歴を表示させる
 上記例ですと、最後にアドレスが記載されていますのでこれを使用してメモリ履歴を
 表示します。
 (lldb) script import lldb.macosx.heap
 (lldb) malloc_info --stack-history 0x1722d7c0
 
3にて表示されたメモリ履歴からどこで不具合が発生したか分かりますので、そこから原因調査の糸口にします。

Xcodeは便利ですね。

拍手[2回]

PR