When the program crashes it will dump a stack trace. You should be able to find the line which caused the crash. Then put a break point a few lines before and check things out.
The stack trace will usually contain only numbers. To get human readable symbols you can use:
atos -o /Users/NNN/XXX/build/Debug-iphonesimulator/XXX.app/XXX [number from stack trace]
Most crashes are due to memory being freed before it is supposed to. Which is often caused by not retaining an object. You can use the retainCount method to print the retain count of any object.
Once you are in the debugger you can use:
po someObject
to print information about an object. Or to get the retain count:
print [someObject retainCount]