0

我知道在 StackOverflow 上几乎没有创建过类似的主题(例如there and there)。我有一个众所周知的问题 - 在 Windows 7 64 位的 Visual Studio 中抛出的用户未处理的异常不是由 IDE 调试器处理的,因此调试器不会中断合适的代码行。因为我不想通过在 Tools->Exceptions... 菜单中启用“Throwing”复选框来捕获所有异常,所以我尝试使用Microsoft article solution

应用 MS 解决方案导致情况发生了变化,但 VS 调试器仍然无法正常运行。

目前,当抛出新异常时,我看到系统内部错误消息,然后 VS 调试器将在错误行上正确停止,但仅持续不到一秒钟,应用程序退出......

您有其他解决方案来解决此错误吗?使用所谓的静默异常进行编程非常不舒服......

编辑:我希望,现在我的问题不那么啰嗦了......

4

1 回答 1

1

在我的情况下,不需要任何注册表修改。根据这个主题和 Redd 的回答,我以这种方式修改了我的 Program.cs 文件:

static void Main()
{
    try
    {
        System.Windows.Forms.Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
        System.Windows.Forms.Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(OnGuiUnhandedException);
        AppDomain.CurrentDomain.UnhandledException += OnUnhandledException;

        var form = new MainForm();
        form.ShowDialog();
    }
    catch (Exception e)
    {
        HandleUnhandledException(e);
    }
    finally
    {
        // Do stuff
    }
}

private static void HandleUnhandledException(Object o)
{
    // TODO: Log it!
    Exception e = o as Exception;

    if (e != null)
    {

    }
}

private static void OnUnhandledException(Object sender, UnhandledExceptionEventArgs e)
{ 
    HandleUnhandledException(e.ExceptionObject);
}

private static void OnGuiUnhandedException(object sender, System.Threading.ThreadExceptionEventArgs e)
{
    HandleUnhandledException(e.Exception);
}

现在我的调试器工作正常,所以它会在未处理的异常上停止并且不会在处理过的异常上停止。看起来微软在操作系统级别为 Windows 7 64 位解决了 SP1 中的静默异常问题,但强制 VS 的正确工作仍然需要一些用户/程序员的操作。

于 2013-01-02T12:00:10.040 回答