Неуловимое исключение, часть 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, она остановится до того, как достигнет ее!)
На самом деле, исключение происходит, когда вы запускаете его и без отладчика. В простом тестовом проекте это игнорируется на каком-то другом уровне, но если ваше приложение имеет какую-либо глобальную обработку исключений, оно также будет запущено там. [смотреть комментарии]
Это вызывает у меня настоящую головную боль, потому что он продолжает запускать обработчик сбоев моего приложения, не говоря уже о боли, которую он пытается отлаживать.