gpt4 book ai didi

c# - 为什么在安装 Visual Studio 2008 后,catch(TException) 处理 block 行为在调试器下有所不同?

转载 作者:太空狗 更新时间:2023-10-29 17:47:34 25 4
gpt4 key购买 nike

考虑下面的控制台应用程序,它具有一个带有通用捕获处理程序的方法,该处理程序捕获类型为 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<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
{
}

在以下情况下,代码的行为符合预期:

  • 如果使用“发布”配置构建,则成功。
  • 如果直接通过 *.exe 执行,而不是通过 Visual Studio (F5) 执行,它会成功。
  • 如果通过将 System.Diagnostics.Debugger.Launch(); 放在 Main() 的第 1 行来附加调试器,它仍然会成功。

当控制台应用程序从 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,这样我就可以确保它被路由到正确的团队。

关于c# - 为什么在安装 Visual Studio 2008 后,catch(TException) 处理 block 行为在调试器下有所不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/700935/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com