VS2008 C#反射调用方法的异常

时间:2008-10-29 15:33:44

标签: c# debugging

如果我调用一个非法的方法,那么调试器会在该方法的代码行停止,这会引发异常

如果我使用反射通过Invoke调用方法并且该方法抛出异常,则调试器会在通过反射调用方法的行上停止,而不是在错误方法本身中调用

如何更改此设置,并且无论调用该方法的方式如何,调试器都会在错误的代码行中停止?

代码内置在Debug

3 个答案:

答案 0 :(得分:3)

检查特定异常的“Thrown”框 - 调试器将在Invoke层捕获(和转换)之前停止抛出异常的位置。

答案 1 :(得分:1)

您使用的是程序集的调试版本吗? 如果没有,调试器无法找到异常的来源。

答案 2 :(得分:1)

如果您知道反射调用的方法签名。您可以创建一个委托。

如果您有班级:

public class MyClass {
    private string GetSomeText() { return DateTime.Now.ToString(); }
}

你可以创建一个委托:

delegate string DlgGetSomeText();

然后使用referenco创建一个委托的实例到具体方法:

MyClass cls = new MyClass();
DlgGetSomeText dlg = (DlgGetSomeText)Delegate.CreateDelegate( cls.GetType(), cls, "GetSomeText" );
string result = dlg();

如果您将使用委托,则不会使用反射调用,因此您的问题将会出现。