为什么不'在Visual Studio中调试时,CreateInstance传递构造函数异常

本文关键字:CreateInstance 异常 构造函数 调试 Studio Visual 为什么不 | 更新日期: 2023-09-27 18:08:33

我使用Activator。CreateInstance来实例化一个对象,我发现如果对象的构造函数抛出一个异常,Visual Studio似乎将该异常视为"用户未处理",即使我包装了对Activator的调用。在try/catch中创建实例。请看下面的例子:

    class NumberDisliker
    {
        public NumberDisliker(int number)
        {
            throw new Exception(string.Format("{0}? I dislike {0}.", number));
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                var blah = new NumberDisliker(5);
            }
            catch
            {
                Console.WriteLine("Caught using 'new'.");
            }
            try
            {
                var blah = Activator.CreateInstance(typeof(NumberDisliker), 5);
            }
            catch
            {
                Console.WriteLine("Caught using Activator.CreateInstance");
            }
            Console.ReadKey();
        }

在Visual Studio中以调试模式运行时,当构造函数中抛出Exception时,执行将停止。然而,当我直接运行可执行文件时(从外部与Visual Studio),它按预期输出两个WriteLine消息,而不会停止执行。我最好的猜测是Visual Studio无法计算出异常被处理,但我不确定为什么。

编辑:作为一个补充,如果我选择在异常助手停止它之后"继续"执行,程序将以预期的输出结束。

为什么不'在Visual Studio中调试时,CreateInstance传递构造函数异常

看看visual studio选项页面,在调试下。

http://msdn.microsoft.com/query/dev12.query?appId=Dev12IDEF1& l = EN-US& k = k (VS.ToolsOptionsPages.Debugger.General)和rd = true

这里有一个选项叫做

当异常跨越AppDomain或托管/本机边界时中断,这可以在使用反射调用时生效。(上述链接本节第三点)

检查setting Debug > Exceptions,您可以在其中设置中断执行的异常