Chciałbym, aby program Visual Studio przestał działać, gdy wystąpi obsługiwany wyjątek (tj. Nie chcę tylko widzieć komunikat „Pierwsza szansa”, chcę debugować rzeczywisty wyjątek).
np. chcę, aby debugger przerwał wyjątek:
try
{
System.IO.File.Delete(someFilename);
}
catch (Exception)
{
//we really don't care at runtime if the file couldn't be deleted
}
Natknąłem się na te uwagi dotyczące Visual Studio.NET:
1) W VS.NET przejdź do menu debugowania >> „Wyjątki ...” >> „Wyjątki środowiska uruchomieniowego języka wspólnego” >> „System” i wybierz opcję „System.NullReferenceException”
2) W dolnej części tego okna dialogowego znajduje się pole grupy „Po zgłoszeniu wyjątku:”, wybierz „Włam się do debugera”
3) Uruchom swój scenariusz. Gdy wyjątek zostanie zgłoszony, debugger zatrzyma się i powiadomi Cię w oknie dialogowym, które mówi coś takiego: „Został zgłoszony wyjątek typu„ System.NullReferenceException ”. [Przerwij] [Kontynuuj]”
Hit [Break]. To umieści Cię w wierszu kodu, który powoduje problem.
Ale nie mają zastosowania do programu Visual Studio 2005 ( w menu Debug nie ma opcji Wyjątki ).
Czy ktoś wie, gdzie znajduje się okno dialogowe opcji znajdowania w programie Visual Studio, w którym znajduje się pole grupy „ Gdy zostanie zgłoszony wyjątek ” z opcją „ Przenieś się do debugera ”?
Aktualizacja: Problem polegał na tym, że w moim menu Debugowanie nie było pozycji Wyjątki . Dostosowałem menu, aby dodać je ręcznie.
źródło
Odpowiedzi:
Po otwarciu rozwiązania przejdź do opcji menu Debuguj - Wyjątki ( Ctrl+ D, E). Stamtąd możesz wybrać przerwanie w wyjątkach rzuconych lub nieobsługiwanych przez użytkownika .
EDYCJA: Moje wystąpienie jest skonfigurowane z „profilem” C #, może nie ma go dla innych profili?
źródło
Common Language Runtime Exceptions
><All Common Language Runtime Exceptions not in this list>
pod Visual Studio 2017 i spełniłem wszystkie moje najśmielsze marzenia.W VS2005 jest okno „wyjątków” ... spróbuj Ctrl+ Alt+ Epodczas debugowania i kliknij pole wyboru „Zgłoszenie” dla wyjątku, na którym chcesz się zatrzymać.
źródło
Zajęło mi trochę czasu, zanim znalazłem nowe miejsce na ustawienia oczekiwań, a zatem nowa odpowiedź.
Od programu Visual Studio 2015 możesz kontrolować, które wyjątki mają zostać zatrzymane w oknie Ustawienia wyjątków (Debugowanie -> Windows -> Ustawienia wyjątków). Skrót jest nadal Ctrl- Alt- E.
Najprostszym sposobem obsługi wyjątków niestandardowych jest wybranie „wszystkich wyjątków, których nie ma na tej liście”.
Oto zrzut ekranu z wersji angielskiej:
Oto zrzut ekranu z wersji niemieckiej:
źródło
W programie Visual Studio 2015 i nowszych musisz przejść do okna dialogowego „Ustawienia wyjątków” ( Ctrl+ Alt+ E) i zaznaczyć „Wyjątki środowiska uruchomieniowego języka wspólnego” (lub konkretny, na przykład
ArgumentNullException
), aby przerwać obsługę wyjątków.Krok 1 Krok 2
źródło
Sprawdź Zarządzanie wyjątkami na stronie Debuggera , wyjaśnia, jak to ustawić.
Zasadniczo oto kroki (podczas debugowania):
W menu Debug kliknij opcję Wyjątki.
W oknie dialogowym Wyjątki wybierz opcję Zgłoszone dla całej kategorii wyjątków, na przykład Wyjątki środowiska wykonawczego języka wspólnego.
-lub-
Rozwiń węzeł dla kategorii wyjątków, na przykład wyjątków środowiska wykonawczego języka wspólnego, i wybierz opcję Zgłoszony dla określonego wyjątku w tej kategorii.
źródło
Technika, której używam, jest podobna do poniższej. Zdefiniuj zmienną globalną, której możesz użyć dla jednego lub wielu bloków try catch w zależności od tego, co próbujesz debugować, i użyj następującej struktury:
Uważam, że daje mi to nieco większą elastyczność pod względem testowania, ponieważ wciąż są pewne wyjątki, na które nie chcę, aby IDE się zepsuło.
źródło
catch(){/*handle or not*/ throw; } // throw without any exception specified will rethrow original exception with original callstack etc
Dokumentacja online wydaje się trochę niejasna, więc przeprowadziłem mały test. Wybranie przerwy przy Zgłoszeniu z okna dialogowego Wyjątki powoduje przerwanie wykonywania programu w przypadku każdego wyjątku, obsługiwanego lub nieobsługiwanego. Jeśli chcesz przerwać tylko dla obsługiwanych wyjątków, wydaje się, że jedynym rozwiązaniem jest przejście przez kod i umieszczenie punktów przerwania na wszystkich obsługiwanych wyjątkach. Wydaje się to trochę przesadne, więc lepiej byłoby dodać instrukcję debugowania za każdym razem, gdy obsługujesz wyjątek. Następnie, gdy zobaczysz te dane wyjściowe, możesz ustawić punkt przerwania w tym wierszu kodu.
źródło