Visual Studio: How to break on handled exceptions?

Visual StudioExceptionDebugging

Visual Studio Problem Overview


I would like Visual Studio to break when a handled exception happens (i.e. I don't just want to see a "First chance" message, I want to debug the actual exception).

e.g. I want the debugger to break at the exception:

try
{
   System.IO.File.Delete(someFilename);
}
catch (Exception)
{
   //we really don't care at runtime if the file couldn't be deleted
}

I came across these notes for Visual Studio.NET:

> 1) In VS.NET go to the Debug Menu >> > "Exceptions..." >> "Common Language > Runtime Exceptions" >> "System" and > select "System.NullReferenceException" > > > 2) In the bottom of that dialog there > is a "When the exception is thrown:" > group box, select "Break into the > debugger" > > 3) Run your scenario. When the > exception is thrown, the debugger will > stop and notify you with a dialog that > says something like: > "An exception of type "System.NullReferenceException" has > been thrown. > [Break] [Continue]" > > Hit [Break]. This will put you on the > line of code that's causing the > problem.

But they do not apply to Visual Studio 2005 (there is no Exceptions option on the Debug menu).

Does anyone know where the find this options dialog in Visual Studio that the "When the exception is thrown" group box, with the option to "Break into the debugger"?

Update: The problem was that my Debug menu didn't have an Exceptions item. I customized the menu to manually add it.

Visual Studio Solutions


Solution 1 - Visual Studio

With a solution open, go to the Debug - Exceptions (Ctrl+D,E) menu option. From there you can choose to break on Thrown or User-unhandled exceptions.

EDIT: My instance is set up with the C# "profile" perhaps it isn't there for other profiles?

Solution 2 - Visual Studio

There is an 'exceptions' window in VS2005 ... try Ctrl+Alt+E when debugging and click on the 'Thrown' checkbox for the exception you want to stop on.

Solution 3 - Visual Studio

Took me a while to find the new place for expection settings, therefore a new answer.

Since Visual Studio 2015 you control which Exceptions to stop on in the Exception Settings Window (Debug->Windows->Exception Settings). The shortcut is still Ctrl-Alt-E.

The simplest way to handle custom exceptions is selecting "all exceptions not in this list".

Here is a screenshot from the english version:

enter image description here

Here is a screenshot from the german version:

enter image description here

Solution 4 - Visual Studio

From Visual Studio 2015 and onward, you need to go to the "Exception Settings" dialog (Ctrl+Alt+E) and check off the "Common Language Runtime Exceptions" (or a specific one you want i.e. ArgumentNullException) to make it break on handled exceptions.

Step 1 Step 1 Step 2 Step 2

Solution 5 - Visual Studio

Check Managing Exceptions with the Debugger page, it explains how to set this up.

Essentially, here are the steps (during debugging):

  1. On the Debug menu, click Exceptions.

  2. In the Exceptions dialog box, select Thrown for an entire category of exceptions, for example, Common Language Runtime Exceptions.

-or-

Expand the node for a category of exceptions, for example, Common Language Runtime Exceptions, and select Thrown for a specific exception within that category.

Solution 6 - Visual Studio

A technique I use is something like the following. Define a global variable that you can use for one or multiple try catch blocks depending on what you're trying to debug and use the following structure:

if(!GlobalTestingBool)
{
   try
   {
      SomeErrorProneMethod();
   }
   catch (...)
   {
      // ... Error handling ...
   }
}
else
{
   SomeErrorProneMethod();
}

I find this gives me a bit more flexibility in terms of testing because there are still some exceptions I don't want the IDE to break on.

Solution 7 - Visual Studio

The online documentation seems a little unclear, so I just performed a little test. Choosing to break on Thrown from the Exceptions dialog box causes the program execution to break on any exception, handled or unhandled. If you want to break on handled exceptions only, it seems your only recourse is to go through your code and put breakpoints on all your handled exceptions. This seems a little excessive, so it might be better to add a debug statement whenever you handle an exception. Then when you see that output, you can set a breakpoint at that line in the code.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionIan BoydView Question on Stackoverflow
Solution 1 - Visual StudioAustin SalonenView Answer on Stackoverflow
Solution 2 - Visual StudioRob WalkerView Answer on Stackoverflow
Solution 3 - Visual StudioBeginnerView Answer on Stackoverflow
Solution 4 - Visual StudioSameer AlibhaiView Answer on Stackoverflow
Solution 5 - Visual StudioGuy StarbuckView Answer on Stackoverflow
Solution 6 - Visual StudioSpencer RuportView Answer on Stackoverflow
Solution 7 - Visual StudiomarkysdadView Answer on Stackoverflow