Re: Exception going "uncaught" despite active @catch handler
Re: Exception going "uncaught" despite active @catch handler
- Subject: Re: Exception going "uncaught" despite active @catch handler
- From: Greg Parker <email@hidden>
- Date: Fri, 11 Apr 2014 14:26:47 -0700
On Apr 11, 2014, at 2:12 PM, Jens Alfke <email@hidden> wrote:
> I’ve got a weird situation where an NSAssertion failure is terminating the process with an “uncaught exception” even though there’s an @try block at a lower stack frame ready to catch it. Stack is below. The RunTestCase() function, down at frame 20, is calling the unit-test function inside of a block like @try{ … } @catch(NSException *x) { … } but the catch block is never entered. Instead the process just quits.
>
> This is screwing up our automated testing, because unit tests after this failing one are never run. Normally the RunTestCase function just logs the exception and marks the test as failed, then continues to the next one. [Note: this is a custom unit test framework, entirely unrelated to OCUnit.]
>
> After a bit more debugging I’ve caught the _dispatch_client_callout function at frame 12 calling objc_terminate after the assertion fails. I suppose it has its own catch block that responds by killing the process. Is there any way around this? I know the Obj-C religion is that exceptions “normally shouldn’t be caught”, but this isn’t exactly a normal situation, it’s unit testing.
libdispatch has its own catch-and-halt exception handler here. It does not allow exceptions to be thrown across its boundaries. The GCD reference says "Your application must catch all exceptions before returning from a block submitted to a dispatch queue."
You may be able to use std::set_terminate() to install a handler that records the test progress so your test machinery can start a new test process where it left off.
--
Greg Parker email@hidden Runtime Wrangler
_______________________________________________
Cocoa-dev mailing list (email@hidden)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden