更新:我已经提交了关于 Microsoft Connect 的错误报告:https ://connect.microsoft.com/VisualStudio/feedback/details/568271/debugger-halting-on-exception-throw-inside-methodinfo-invoke#details
如果您可以在您的机器上重现此问题,请为该错误投票,以便修复它!
好的,我已经进行了一些测试,并将问题简化为非常简单的问题:
一世。在引发异常的新类中创建一个方法:
public class Class1 {
public void CallMe() {
string blah = null;
blah.ToLower();
}
}
ii. 在其他地方创建一个指向此方法的 MethodInfo:
Type class1 = typeof( Class1 );
Class1 obj = new Class1();
MethodInfo method = class1.GetMethod( "CallMe" );
iii. 在 try/catch 块中包装对 Invoke() 的调用:
try {
method.Invoke( obj, null ); // exception is not being caught!
} catch {
}
iv. 在没有调试器的情况下运行程序(工作正常)。
v. 现在用调试器运行程序。当异常发生时,调试器将停止程序,即使它被包装在试图忽略它的 catch 处理程序中。(即使你在 catch 块中放了一个断点,它也会在到达之前停止!)
事实上,当您在没有调试器的情况下运行它时也会发生异常。在一个简单的测试项目中,它会在其他级别被忽略,但如果您的应用程序有任何类型的全局异常处理,它也会在那里被触发。 [看评论]
这让我非常头疼,因为它不断触发我的应用程序的崩溃处理程序,更不用说尝试调试的痛苦了。