…..drumroll please…and it is…is: objc_exception_throw. You should always have this breakpoint setup in any Cocoa or Cocoa Touch app that you are building.
How do you do it? In Xcode, Run -> Show -> Breakpoints and double click on a new breakpoint. Type it in, ie:
Exceptions in cocoa are, well, exceptional. If your app is throwing them, then you should fix them.
I always break on raise, but there are instances where that doesn’t quite work and this might be better. Thanks!
Yes — breaking on -raise (or, specifically, -[NSException raise]) worked great in Tiger, but would sometimes miss a few exceptoins. In Leopard or higher it won’t get hit at all, and objc_exception_throw is the single funnel point for all exceptions. Ideally, this should be a default breakpoint places in all project templates.
“In Leopard or higher it won’t get hit at all”
Huh. Why is that? Why the change?
This is good to know! Thanks.
Basically, before there may have been multiple ways an exception could be thrown. I don’t know the exact details. The thing to understand now is that there is a single funnel point for them all, which makes breaking on any exception much easier!
Okay, cool. I’ve been using break on [NSException raise] since EOF on NeXTSTEP 3.2, so I was wondering what the change was.
It’s actually a nice and helpful piece of info. I’m satisfied that you shared this useful info with us. Please stay us up to date like this. Thanks for sharing.