当前位置:  开发笔记 > 编程语言 > 正文

为什么安装Visual Studio 2008后,调试器下的catch(TException)处理块行为会有所不同?

如何解决《为什么安装VisualStudio2008后,调试器下的catch(TException)处理块行为会有所不同?》经验,为你挑选了1个好方法。

考虑下面的控制台应用程序,其特色是具有捕获类型异常的通用catch处理程序的方法TException.

当使用"调试"配置构建此控制台应用程序并在Visual Studio调试器下执行时(即通过*.vshost.exe),这在Visual Studio 2005和Visual Studio 2008中都会失败.

我相信这个问题只是在我安装Visual Stuido 2008之后才出现的.

using System;

class Program
{
    static void Main()
    {
        Console.WriteLine(Environment.Version);
        CatchAnException();

        Console.ReadKey();
    }

    private static void CatchAnException()
        where TException : Exception
    {
        Console.WriteLine("Trying to catch a <{0}>...", typeof(TException).Name);
        try
        {
            throw new TestException();
        }
        catch (TException ex)
        {
            Console.WriteLine("*** PASS! ***");
        }
        catch (Exception ex)
        {
            Console.WriteLine("Caught <{0}> in 'catch (Exception ex)' handler.", ex.GetType().Name);
            Console.WriteLine("*** FAIL! ***");
        }
        Console.WriteLine();
    }
}

internal class TestException : Exception
{
}

在以下情况下,代码按预期运行:

如果使用"Release"配置构建,则会成功.

如果直接通过*.exe执行,而不是通过Visual Studio(F5)执行,则会成功.

如果通过放置System.Diagnostics.Debugger.Launch();第1行来附加调试器Main()仍然成功.

从Visual Studio(2005或2008)中启动控制台应用程序,因此在ConsoleApplication.vshost.exe下执行时,它将失败.

这是我失败案例的输出

2.0.50727.3068
Trying to catch a ...
*** FAIL! ***

Caught  in 'catch (Exception ex)' handler.
  Expected: 
    Actual: 
  Result of typeof(TException) == ex.GetType() is True

造成这种特殊故障的原因是什么?



1> JaredPar..:

这确实很奇怪.我验证了VB.Net也存在这个问题所以它不是C#特有的问题.它需要由核心调试器团队确认,但它确实看起来像一个bug.

请在Connect上提交一个错误并将错误号作为评论发布到我的OP,这样我就可以确保它被路由到正确的团队.

推荐阅读
和谐啄木鸟
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有