考虑下面的控制台应用程序,该应用程序具有一个带有通用捕获处理程序的方法,用于捕获类型的异常TException
.
当此控制台应用程序使用“调试”配置构建并在 Visual Studio 调试器下执行(即通过 *.vshost.exe)时,在 Visual Studio 2005 和 Visual Studio 2008 中都会失败。
我相信这个问题是在我安装了 Visual Studio 2008 之后才出现的。
using System;
class Program
{
static void Main()
{
Console.WriteLine(Environment.Version);
CatchAnException<TestException>();
Console.ReadKey();
}
private static void CatchAnException<TException>()
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 <TestException>...
*** FAIL! ***
Caught <TestException> in 'catch (Exception ex)' handler.
Expected: <TestException>
Actual: <TestException>
Result of typeof(TException) == ex.GetType() is True
是什么导致了这种特殊的失败?
这确实很奇怪。我验证了 VB.Net 也存在该问题,因此这不是 C# 特定的问题。它需要由核心调试器团队确认,但它看起来确实像一个错误。
请在以下位置提交错误Connect并将错误编号作为评论发布给我的 OP,以便我可以确保将其路由到正确的团队。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)