なぜなかなか引っかからなかったかというと、XCodeのバージョン。
3はあるけど、4はない、みたいな。
取りあえず、以下の通り。
まず、「Manage Schemes...」を選択
開いているProjectを選択して、画面左下の「Edit」を押下。 |
画面の右ペインに「Environment Variables」という所があるので、
図のように3項目をvalue=YESで設定してあげる。
|
すると、DebugConsoleに誰がどこでalloc、freeしたががわかるようになる。
早速、EXC_BAD_ACCESSがでるコードをエミュレートしてみると、以下のようなログがでると思います。
|
2012-08-28 19:36:35.367 HelloWorld[38022:1be03] cocos2d: cocos2d v2.0.0 2012-08-28 19:36:35.368 HelloWorld[38022:1be03] cocos2d: Using Director Type:CCDirectorDisplayLink 2012-08-28 19:36:35.421 HelloWorld[38022:1be03] Retina Display Not supported 2012-08-28 19:36:35.428 HelloWorld[38022:1be03] cocos2d: animation started with frame interval: 60.00 2012-08-28 19:36:35.434 HelloWorld[38022:1be03] cocos2d: surface size: 480x320 2012-08-28 19:36:35.436 HelloWorld[38022:1be03] cocos2d: CCTexture2D: Using RGB565 texture since image has no alpha [Switching to process 38022 thread 0x1f113] [Switching to process 38022 thread 0x1be03] 2012-08-28 19:36:37.279 HelloWorld[38022:1be03] *** -[CCSprite zOrder]: message sent to deallocated instance 0xaa87e20 sharedlibrary apply-load-rules all (gdb) shell malloc_history 38022 0xaa87e20
最後の行に「(gdb)」ってでると思うので、ここで「shell malloc_history {PID} {インスタンスアドレス}」というコマンドを打ってあげると、以下のようなログがでて、メモリの履歴を見れます。
ALLOC 0xaa87e10-0xaa87e4f [size=64]: thread_b024f000 |thread_start | _pthread_start | cvmDoWork | (省略) | malloc | malloc_zone_malloc
FREE 0xaa87e10-0xaa87e4f [size=64]: thread_b024f000 |thread_start | _pthread_start | cvmDoWork | (省略) | free
(省略)と書いた所に、自分が作成したクラス名とかメソッド名が記載されていたら、そこに問題アリって感じでデバッグできるよ。