C# 调试控制台应用程序时,Visual Studio陷入异常报告循环。为什么?

C# 调试控制台应用程序时,Visual Studio陷入异常报告循环。为什么?,c#,visual-studio-2010,C#,Visual Studio 2010,考虑这个简单的控制台应用程序: using System; namespace Demo { class Program { static void Main(string[] args) { throw new Exception(); } } } 我在VisualStudio2010或VisualStudio2012测试版中的调试器下运行此程序 当我这样做时,调试器自然会在异常处停止。好的,到

考虑这个简单的控制台应用程序:

using System;

namespace Demo
{
    class Program
    {
        static void Main(string[] args)
        {
            throw new Exception();
        }
    }
}
我在VisualStudio2010或VisualStudio2012测试版中的调试器下运行此程序

当我这样做时,调试器自然会在异常处停止。好的,到目前为止

但当我按F5继续(或选择Debug | continue)时,它会再次在同一异常处停止。 我必须停止调试程序才能退出。当我按F5时,我希望程序退出

有人知道它为什么会这样吗

[编辑]

我已将答复标记为答案,但为了查看调试器行为的奇怪后果,请考虑以下代码:

using System;

namespace Demo
{
    class Program
    {
        static void Main(string[] args)
        {
            AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
            throw new Exception();
        }

        static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
        {
            Console.WriteLine("Unhandled Exception.");
        }
    }
}

在调试器下运行此命令并按F5多次,然后查看输出。您将看到许多“未处理的异常”消息,尽管代码实际上只抛出一次。调试器导致多次抛出异常!这就是我觉得奇怪的地方。

它没有这样做。如果应用程序未在调试器中运行,则会出现“应用程序意外退出”对话框,但在Visual Studio中不会出现

虽然我不确定它为什么会这样,但可能是因为它提供了将“当前正在执行的行”箭头(黄色数组)移动到应该执行的下一行并恢复操作的选项


否则,是的,您需要显式停止应用程序。

默认情况下,调试器会在未捕获(即未处理)的所有异常上停止调试器-这可以在“异常”对话框中更改(CTRL+ALT+e,使用我的键绑定)

您期望什么

考虑以下方法:

private void Test()
{
    throw new Exception();  
    int u = 4;
}
抛出异常时,调试器允许您导航到调用上下文,以查看程序是否捕获异常。如果不是这样,它就不会跳过异常退出
Test
方法,这就是为什么
intu=4无法访问

在您的示例中,是相同的:

private static void Main(string[] args)
{
    throw new Exception();

    // If I'm here, I will exit the application !
    // But this place is unreachable
}
由于异常,无法退出
Main
方法范围。这就是为什么在使用F5进行调试时无法退出应用程序


如果您没有附加调试器,您的应用程序当然会因为未处理的异常而崩溃,但这是另一回事。

VS2012调试器不会在未处理的异常之后继续运行。

我预期的是,按F5将退出程序。。。我想你说的有些道理。