Visual Studio 2010和Windows 7 64位静默异常

时间:2013-01-01 14:27:40

标签: visual-studio-2010 exception

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

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

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

您是否有其他解决方案可以解决此问题?使用所谓的静默异常进行编程非常不舒服......

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

1 个答案:

答案 0 :(得分:1)

在我的情况下,不需要注册表修改。根据{{​​3}}和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);
}

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