Por que o comportamento do bloco de manipulação de capturas (TException) difere no depurador após a instalação do Visual Studio 200
Considere o aplicativo de console abaixo, apresentando um método com um manipulador de captura genérico que captura exceções do tipoTException
.
Quando esse aplicativo de console é criado com a configuração 'Debug' e executado no depurador do Visual Studio (ou seja, através do * .vshost.exe), isso falha, no Visual Studio 2005 e no Visual Studio 2008.
Acredito que esse problema surgiu apenas após a instalação do 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
{
}
Sob as seguintes circunstâncias, o código se comporta conforme o esperado:
Se construído com a configuração 'Release', é bem-sucedid Se executado diretamente pelo * .exe, e não pelo Visual Studio (F5), ele é bem-sucedidSe anexar um depurador colocandoSystem.Diagnostics.Debugger.Launch();
na linha 1 deMain()
ainda tem sucesso.Quando o aplicativo de console é iniciado a partir do Visual Studio (2005 ou 2008) e, portanto, executado em ConsoleApplication.vshost.exe, ele falh
Aqui está minha saída para o caso de falha
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
O que está causando essa falha peculiar?