c#在try catch中的错误行停止

本文关键字:错误 try catch | 更新日期: 2023-09-27 18:05:46

如果我运行下面调用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);
  }
}

c#在try catch中的错误行停止

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

当抛出异常时如何:Break:

在"调试"菜单中单击"例外"。

在"异常"对话框中,为整个异常类别选择"抛出",例如,"公共语言运行时异常"。

或者

展开异常类别的节点,例如,Common Language Runtime exceptions,并为该类别中的特定异常选择Thrown。

您想要的是Visual Studio 在抛出异常时中断执行:

在"调试"菜单中单击"例外"。

在"异常"对话框中,为整个异常类别选择"抛出",例如(您的情况),公共语言运行时异常。

MSDN参考。

Visual Studio只会在出现未处理的异常时进行干预,在这种情况下是除0。try...catch处理异常。因为没有未处理的异常,所以Visual Studio不会跳出

try和catch语句的目的是使执行流程仍然可以发生,即使发生异常。只有当异常未处理时,调试器才会停止,而try catch会停止。