Question

My Mac app is crashing with exc_bad_access on the run loops. So I enabled NSZombies, and Now I don't see such error as expected ( As the objects are not de-allocated).

But, I don't find any useful NSZombie Log in the console. Is there a way to identify the issue ?

Was it helpful?

Solution

It's challenging. The most common cause of this error in Cocoa is directly accessing your ivars rather than using accessors. Accessors make the vast majority of memory crashes go away.

That said, they're not the only cause of memory errors. You may be accessing memory other ways. NSZombie does one specific thing: When you deallocate an object, NSZombie says "don't actually deallocate the object." Instead it turns the object into a zombie object that prints an error if you send it messages. But that only helps if the crash is due to sending a message to a deallocated instance. It could be lots of other things.

You should start first with the crash stack itself. Look up the stack and see what kind of object it might be, or who might be calling it.

Read TN2124, particularly the section on the BSD Memory Allocator, and the Enabling the Malloc Debugging Features section of the memory Usage Performance Guidelines. There are lower-level tools than NSZombie that you can use. MallocScribble is often the most useful. It overwrites deallocated memory with 0x55 so that you're more likely to crash sooner, and to make it easier to detect deallocated memory in the debugger. MallocPreScribble is useful for finding uninitialized memory, but this really only helps if you do raw malloc calls. ObjC objects are always pre-initialized.

And of course you have to put on your detective hat. What parts of your program are most suspicious? Are you doing multi-threaded work (that can cause memory crashes if you don't lock correctly).

If it reproduces easily, then you'll figure it out. If it only happens occasionally, well... I've hunted bugs like that for many months sometimes. Sometimes it's just hard.

OTHER TIPS

You need to use memory profiler for that. Just build with Profile option and select Leaks.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top