为什么安装Visual Studio 2008后,调试器下的catch(TException)处理块行为会有所不同?
考虑下面的控制台应用程序,其特色是具有捕获TException
类型exception的通用catch处理程序的方法。
当使用“调试”配置构建此控制台应用程序并在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 ...", typeof(TException).Name); try { throw new TestException(); } catch (TException ex) { Console.WriteLine("*** PASS! ***"); } catch (Exception ex) { Console.WriteLine("Caught in 'catch (Exception ex)' handler.", ex.GetType().Name); Console.WriteLine("*** FAIL! ***"); } Console.WriteLine(); } } internal class TestException : Exception { }
在以下情况下,代码按预期运行:
从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
造成这种特殊故障的原因是什么?
这确实很奇怪。 我validation了VB.Net也存在这个问题所以它不是C#特有的问题。 它需要由核心调试器团队确认,但它确实看起来像一个bug。
请在Connect上提交一个错误并将错误号作为评论发布到我的OP,这样我就可以确保它被路由到正确的团队。
这是由CLR中的错误引起的已知问题。 它已在CLR 4.0中修复(尚未发布)。
感谢JaredPar对此的帮助。 有关更多详细信息,请参阅有关其答案的评论,并链接到Microsoft Connect上的原始错误报告 。
上述就是C#学习教程:为什么安装Visual Studio 2008后,调试器下的catch(TException)处理块行为会有所不同?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1020431.html