iPhoneアプリ開発 EXC_BAD_ACCESS対策方法

Screen shot 2011-09-24 at 5.19.44 PM

必ずぶつかるEXC_BAD_ACCESS

iPhone/iPadアプリを開発していてかならず見るのでEXC_BAD_ACCESSのエラー。。
このエラーは発生箇所が記述されないのでとても困る。
発生源をピンポイントで掴む方法はないみたいだけど、手かがりをコンソールに表示することはできるみたい。
その方法をメモ。
ちなみにXcodeのバージョンは4.3

Xcode設定方法

設定はとても簡単。

1. Schemeから「Edit Scheme」をクリック!

Edit Schemeをクリック

 

2. RunからEnviroment Variablesに追加

下記三つの項目を追加する。値は全てYESにする。

NSZombieEnabled | YES
MallocStackLogging | YES
NSDebugEnabled | YES

こんな感じですね。↓
Enviroment VariablesにNSZombieEnabled

設定はこれだけでOK!!

 

3. EXC_BAD_ACCESS時にコンソールを見てみると…

以前より詳細なメッセージが表示されるようになりました。
下記を見てみるとUIImageまわりで問題が起きているようでした。
(残念ながらこの情報までしかだしてくれませんが・・)

*** -[UIImage isKindOfClass:]: message sent to deallocated instance 0x561c4d0

EXC_BAD_ACCESS時のコンソール

もっと詳細な情報がほしい場合は、コンソール下の(gdb)に下記のコマンドをうつことで得ることができます。

shell malloc_history {pid/partial-process-name} {address}

なので、上のキャプチャ画像の場合はこんな感じ。↓

shell malloc_history 3966 0x561c4d0

このコマンドをうつと大量の文字がズラズラとでてきます。。
ここを見てメソッドなりクラスなり手かがりがわかる場合もあるようです。
今回は、このコマンドでこれといった情報は得られなかったので、
コンソールにでてたUIImageまわりを諸々確認して解決しました。

もっとピンポイントでわかる方法はないものか・・・。