C#在try catch内的错误行上停止

C#在try catch内的错误行上停止,c#,try-catch,breakpoints,C#,Try Catch,Breakpoints,如果我运行下面调用Test1()的代码,VS2012将很好地在这一行中断,并准确地显示发生了什么。如果我注释掉Test1并放入Test2,那么try-catch不会在该行停止,它只是将其注销到控制台 即使VS2012被try-catch语句包围,如何让它停止在错误行上 private void Button_Click(object sender, RoutedEventArgs e) { //Test1(); // No try catch - stops on error line di

如果我运行下面调用Test1()的代码,VS2012将很好地在这一行中断,并准确地显示发生了什么。如果我注释掉Test1并放入Test2,那么try-catch不会在该行停止,它只是将其注销到控制台

即使VS2012被try-catch语句包围,如何让它停止在错误行上

private void Button_Click(object sender, RoutedEventArgs e)
{
  //Test1(); // No try catch - stops on error line dividing by zero.
  Test2(); // Try catch - Just writes out to console.
}

private void MakeError()
{
  int i = -1;
  i += 1;
  int j = 1 / i;
  Console.WriteLine(j.ToString());
}

void Test1()
{
  Console.WriteLine("MakeError in Test1");

  MakeError();
}

void Test2()
{
  Console.WriteLine("MakeError in Test2");
  try
  {
    MakeError();
  }
  catch (Exception ex)
  {
    Console.WriteLine(ex.Message);
  }
}

Visual Studio将仅在存在未处理的异常时进行干预,在本例中为0除。
try…catch
处理了异常。由于没有未处理的异常,Visual Studio将不会跳出。

Visual Studio将仅在存在未处理的异常时进行干预,在这种情况下,除以0。
try…catch
处理了异常。由于没有未处理的异常,Visual Studio将不会跳出。

try-and-catch语句旨在使执行流仍然可以发生,即使发生异常也是如此。只有当异常未处理时,调试器才会停止,
try-catch
会这样做


这是有意的。

try-and-catch语句旨在使执行流仍然可以发生,即使在发生异常时也是如此。只有当异常未处理时,调试器才会停止,
try-catch
会这样做


这是有意的。

您想要的是Visual Studio在引发异常时中断执行。:

在“调试”菜单上,单击“异常”

在“异常”对话框中,为整个异常类别选择“引发”,例如(您的案例),公共语言运行时异常


您需要的是Visual Studio在引发异常时中断执行

在“调试”菜单上,单击“异常”

在“异常”对话框中,为整个异常类别选择“引发”,例如(您的案例),公共语言运行时异常


虽然其他答案是正确的,但默认情况下这是故意行为,如果您愿意,可以告诉Visual Studio提醒您这些异常

: 在“调试”菜单上,单击“异常”

在“异常”对话框中,为整个异常类别(例如,公共语言运行时异常)选择“引发”

-或-


展开异常类别(例如,公共语言运行时异常)的节点,然后为该类别中的特定异常选择“引发”。

虽然其他答案正确,但默认情况下这是有意行为,如果愿意,您可以告诉Visual Studio提醒您这些异常

: 在“调试”菜单上,单击“异常”

在“异常”对话框中,为整个异常类别(例如,公共语言运行时异常)选择“引发”

-或-


展开异常类别(例如,公共语言运行时异常)的节点,然后为该类别中的特定异常选择“抛出”。

我感到困惑的是,单元列表(例如System、System.ComponentModel等)看起来不像是有我自己的代码条目,这意味着我自己编写的代码。但是现在我看到,被零除的异常实际上是在系统单元中定义的,因此在这一位置选中抛出的复选框就足以使它在这里发布的示例错误中中断。即使在搜索了一段时间后,这些对我来说都不明显,因此我将把这个主题留在这里,希望其他人能发现它有用。我感到困惑的是,单元列表(例如System、System.ComponentModel等)看起来不像是我自己编写的代码的条目,这意味着我自己编写的代码。但是现在我看到,被零除的异常实际上是在系统单元中定义的,因此在这一位置选中抛出的复选框就足以使它在这里发布的示例错误中中断。即使搜索了一段时间,这些对我来说都不明显,所以我将把这个话题留在这里,希望其他人能发现它有用。