Visual Studio:如何打破处理的异常?

时间:2008-09-22 19:18:24

标签: visual-studio exception debugging

我希望Visual Studio在发生处理异常时中断(即我不只是想看到“第一次机会”消息,我想调试实际异常)。

e.g。我希望调试器在例外情况下中断:

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

我遇到了Visual Studio.NET的these笔记:

  

1)在VS.NET中转到Debug菜单>>   “例外......”>> “通用语言   运行时异常“>>”系统“和   选择“System.NullReferenceException”

     

2)在那个对话框的底部   是一个“当抛出异常时:”   组合框,选择“闯入   调试器“

     

3)运行您的方案。当。。。的时候   抛出异常,调试器会   停止并通过对话框通知您   说的话:             “类型”System.NullReferenceException“的例外有   被抛出             [休息] [继续]“

     

点击[Break]。这将使你   造成这种情况的代码行   问题

但它们不适用于Visual Studio 2005(调试菜单上没有例外选项)。

有没有人知道在Visual Studio中找到此选项对话框的“当抛出异常”组框时,可以选择“进入调试器 “?

更新:问题是我的调试菜单没有例外项。我自定义菜单以手动添加它。

7 个答案:

答案 0 :(得分:153)

打开解决方案后,转到Debug - Exceptions( Ctrl + D E )菜单选项。从那里你可以选择打破Thrown或User-unhandled exception。

编辑:我的实例是使用C#“配置文件”设置的,也许它不适用于其他配置文件?

答案 1 :(得分:36)

VS2005中有一个'例外'窗口...在调试时尝试 Ctrl + Alt + E 并点击'Thrown '要停止的例外的复选框。

答案 2 :(得分:15)

花了一些时间找到新的地方进行预期设置,因此是一个新的答案。

自Visual Studio 2015 以来,您可以在“例外设置”窗口中控制要停止的例外(Debug-> Windows->例外设置)。快捷方式仍为 Ctrl - Alt - E

处理自定义异常的最简单方法是选择“不在此列表中的所有异常”。

以下是英文版的截图:

enter image description here

以下是德语版的截图:

enter image description here

答案 3 :(得分:10)

从Visual Studio 2015开始,您需要转到"异常设置"对话框( Ctrl + Alt + E )并检查"公共语言运行时例外" (或者你想要的特定的一个,即ArgumentNullException),使其在处理例外中断。

第1步 Step 1 第2步 Step 2

答案 4 :(得分:7)

查看Managing Exceptions with the Debugger页面,它解释了如何进行设置。

基本上,这是步骤(在调试期间):

  1. 在“调试”菜单上,单击“例外”。

  2. 在“例外”对话框中,为整个例外类别选择“投掷”,例如“公共语言运行时例外”。

    -OR -

    展开一个例外类别的节点,例如,公共语言运行时异常,并为该类别中的特定异常选择“投掷”。

答案 5 :(得分:1)

我使用的技术如下所示。根据您尝试调试的内容定义一个可用于一个或多个try catch块的全局变量,并使用以下结构:

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

我发现这在测试方面给了我更大的灵活性,因为仍然有一些例外我不想让IDE中断。

答案 6 :(得分:0)

在线文档似乎有点不清楚,所以我只是做了一点测试。从“异常”对话框中选择中断“抛出”会导致程序执行在任何异常中中断,处理或取消处理。如果您只想打破处理的异常,那么您似乎唯一的办法是遍历您的代码并在所有处理的异常上放置断点。这看起来有点过分,因此在处理异常时添加调试语句可能会更好。然后,当您看到该输出时,可以在代码中的该行设置断点。