如果我运行下面调用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);
}
}
答案 0 :(得分:4)
虽然其他答案是正确的,但默认情况下这是故意行为,如果您愿意,可以告诉Visual Studio提醒您注意这些例外情况。
在“调试”菜单上,单击“例外”。
在“例外”对话框中,为整个例外类别选择“投掷”,例如“公共语言运行时例外”。
-OR -
展开一类异常的节点,例如,公共语言运行时异常,并为该类别中的特定异常选择“投掷”。
答案 1 :(得分:1)
你想要的是Visual Studio 在抛出异常时中断执行:
在“调试”菜单上,单击“例外”。
在“例外”对话框中,为整个例外类别选择“投掷”,例如(您的案例),“公共语言运行时例外”。
答案 2 :(得分:0)
Visual Studio只会在存在未处理的异常时进行干预,在这种情况下除以0. try...catch
处理异常。由于没有未处理的异常,Visual Studio不会跳出来。
答案 3 :(得分:0)
尝试使用catch语句,以便即使发生异常,仍然可以执行执行流程。调试器仅在未处理异常时停止,try catch
执行此操作。
这是故意的。