Неуловимое исключение, часть 2

Обновить: Я отправил отчет об ошибке в Microsoft Connect:https://connect.microsoft.com/VisualStudio/feedback/details/568271/debugger-halting-on-exception-thrown-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. Оберните вызов Invoke () в блок try / catch:

try {
    method.Invoke( obj, null ); // exception is not being caught!
} catch {
}

внутривенно Запустите программу без отладчика (работает нормально).

v. Теперь запустите программу с помощью отладчика. Отладчик остановит программу, когда возникнет исключение, даже если оно помещено в обработчик перехвата, который пытается его игнорировать. (Даже если вы установите точку останова в блоке catch, она остановится до того, как достигнет ее!)

На самом деле, исключение происходит, когда вы запускаете его и без отладчика. В простом тестовом проекте это игнорируется на каком-то другом уровне, но если ваше приложение имеет какую-либо глобальную обработку исключений, оно также будет запущено там. [смотреть комментарии]

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

Ответы на вопрос(2)

Ваш ответ на вопрос