Aktualizacja: Mam złożył raport o błędzie na Microsoft Connect: https://connect.microsoft.com/VisualStudio/feedback/details/568271/debugger-halting-on-exception-thrown-inside-methodinfo-invoke#detailsnieuchwytny wyjątek, pkt 2
Jeśli można odtworzyć ten problem na komputerze, proszę upvote bug więc można go naprawić!
Ok zrobiłem kilka testów i mam problem zmniejszona do czegoś bardzo prostego:
ja. Utwórz metodę w nowej klasie, która zgłasza wyjątek:
public class Class1 {
public void CallMe() {
string blah = null;
blah.ToLower();
}
}
ii. Utwórz MethodInfo, która wskazuje na tę metodę w innym miejscu:
Type class1 = typeof(Class1);
Class1 obj = new Class1();
MethodInfo method = class1.GetMethod("CallMe");
iii. Zawijanie wywołania Invoke() w bloku try/catch:
try {
method.Invoke(obj, null); // exception is not being caught!
} catch {
}
iv. Uruchom program bez debuggera (działa dobrze).
v. Uruchom teraz program z debugerem. Debugger zatrzyma program, gdy wystąpi wyjątek, mimo że jest zawijany w procedurze catch, która próbuje go zignorować. (Nawet jeśli umieścisz punkt przerwania w bloku catch, zatrzyma się zanim dotrze do niego!)
W rzeczywistości wyjątek ma miejsce, gdy uruchamiasz go bez debuggera. W prostym projekcie testowym jest ignorowany na jakimś innym poziomie, ale jeśli twoja aplikacja ma jakąkolwiek globalną obsługę wyjątków, zostanie tam również wywołana.
[Zobacz komentarze]
To jest przyczyną mnie prawdziwy ból głowy, ponieważ utrzymuje wyzwalanie zderzeniowych obsługi mojej aplikacji, nie wspominając o bólu to jest próba debugowania.
+1 bo wziął czas, aby zmniejszyć to na przykład –
Zobacz sane tutaj : http://stackoverflow.com/questions/2724703/why-does-vs2010-always-break-on-exception-from-methodinfo-inoke –
Czy włączono wyjątek jako "zatrzymaj przy rzucaniu" w Visual Studio? to zachowanie, przejdź do Debug | Exceptions i odznacz opcję stop on throw. –