VS2008 C # Исключения с методами, вызываемыми отражением - PullRequest
2 голосов
/ 29 октября 2008

Если я вызову метод, который делает что-то недопустимое, отладчик остановится на строке кода в том методе, который вызвал исключение

Если я использую отражение для вызова метода через Invoke, и этот метод выдает исключение, отладчик останавливается на строке, где метод был вызван через отражение, а не в самом неисправном методе

Как мне это изменить, и чтобы отладчик остановился на строке кода с ошибкой независимо от того, как был вызван метод?

Код встроен в Debug

Ответы [ 3 ]

3 голосов
/ 29 октября 2008

Установите флажок «Брошено» для конкретного исключения - отладчик остановится там, где выброшено исключение, прежде чем оно будет перехвачено (и переведено) слоем Invoke.

1 голос
/ 29 октября 2008

Если вы знаете эту сигнатуру метода, вызванного рефлексией. Вы можете создать делегата.

Если у вас есть класс:

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();

Если вы будете использовать делегата, вызов рефлексии не будет использоваться, поэтому ваша проблема кивнет.

1 голос
/ 29 октября 2008

Используете ли вы отладочную версию сборки? Если нет, отладчик не может найти источник исключения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...