I was posed the problem a few weeks ago that someone has a coding project where the execution engine swallows all exceptions and unless explicitly catching all exceptions (he didn’t want to put a big try catch around everything in production code) there would be little or difficulty in finding if an exception had been thrown in one of his modules.

After some thought, I considered that by utilising anonymous delegates (Action and Func) he would be able to add testing to the existing code very easily, and utilize the Debug/Release modes within Visual Studio.

I proposed, unfortunately with out use of whiteboards or anything which would have been useful, to have within a test harness a helper method which took one of these anonymous delegates, and caught all exceptions and wrote them to Trace to allow him to view them after a test. 

public static void ExceptionHelper(Action action)
{
    try
    {
        action();
    }
    catch (Exception ex)
    {
        Trace.WriteLine(ex);
    }
}

Within the main body of the test harness to add an

#if DEBUG

to allow him to easily swap between running with exceptions handled himself or to allow them to pass through to the execution engine.

public static void TestHarness()
{
    Trace.Listeners.Add(new ConsoleTraceListener());
#if DEBUG
    ExceptionHelper(FunctionToTest);            
#else
    FunctionToTest();
#endif
}

Now when Visual Studio runs the test harness in Debug mode, the exceptions will be caught, as the delegate points to the FunctionToTest method which is executed by the action(); line in ExceptionHelper.  If the user is in Release mode (i.e. not in Debug) then the Function will be executed as normal.