为什么不'在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选项页面,在调试下。
http://msdn.microsoft.com/query/dev12.query?appId=Dev12IDEF1& l = EN-US& k = k (VS.ToolsOptionsPages.Debugger.General)和rd = true
这里有一个选项叫做
当异常跨越AppDomain或托管/本机边界时中断,这可以在使用反射调用时生效。(上述链接本节第三点)
检查setting Debug > Exceptions
,您可以在其中设置中断执行的异常