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);
}
}
虽然其他答案是正确的,但这是默认的故意行为,如果您愿意,您可以告诉Visual Studio提醒您这些异常。
当抛出异常时如何:Break:
在"调试"菜单中单击"例外"。
在"异常"对话框中,为整个异常类别选择"抛出",例如,"公共语言运行时异常"。
或者
展开异常类别的节点,例如,Common Language Runtime exceptions,并为该类别中的特定异常选择Thrown。
您想要的是Visual Studio 在抛出异常时中断执行:
在"调试"菜单中单击"例外"。
在"异常"对话框中,为整个异常类别选择"抛出",例如(您的情况),公共语言运行时异常。
MSDN参考。
Visual Studio只会在出现未处理的异常时进行干预,在这种情况下是除0。try...catch
处理异常。因为没有未处理的异常,所以Visual Studio不会跳出
try和catch语句的目的是使执行流程仍然可以发生,即使发生异常。只有当异常未处理时,调试器才会停止,而try catch
会停止。