Tracking Down EXC_BAD_ACCESS Errors with NSZombieEnabled
It’s only a matter of time before you’ll find yourself face to face with the dreaded EXC_BAD_ACCESS error message. This message generally occurs when you attempt to access an object that has previously been released.
NSZombieEnabled is an environment variable which can be helpful to track down the elusive object causing the problem. With the environment variable set, Cocoa will redirect all objects isa pointer to an NZZombie object once an objects retain count has reached zero. In the future, should you try and send a message to a previously released object, an exception will be raised showing a message similar to the following:
Setting NSZombieEnabled Environment Variable
In the Groups and Files section, expand the Executables section and right click on your app name and choose Get Info from the dialog:
Select the Arguments tab on the top and then add a new entry in the Variables to be set in the environment section. Name the new variable to NSZombieEnabled and set its value to YES.
Tracking Down the Error
Using a zombie, messages sent to an object that has already released will now generate the exception shown above, and following the stack track should now help you find the location of the object that is generating the EXC_BAD_ACCESS error.
Don’t forget to remove the environment variable, or at a minimum untick the checkbox once you find the source of the problem.