Visual Studio: jak złamać obsługiwane wyjątki?

Chciałbym, aby Visual Studio złamało się, gdy wystąpi obsłużony wyjątek (tzn. nie chcę tylko zobaczyć komunikatu "pierwszej szansy", chcę debugować rzeczywisty wyjątek).

Np. chcę, aby debugger złamał się przy wyjątku:

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ę te notatki do Visual Studio.NET:

1) w VS.NET przejdź do menu debugowania >> "Wyjątki...">>"Wspólny Język Wyjątki Runtime "> > "System" i wybierz "System.NullReferenceException "

2) na dole tego okna jest " gdy wyjątek jest wyrzucany:" Pole grupy, wybierz " Przełam do debugger "

3) Uruchom swój scenariusz. Kiedy wyjątek jest wyrzucany, debugger będzie Zatrzymaj i powiadom Cię o tym za pomocą okna dialogowego, które mówi coś w stylu: System "wyjątek typu".NullReferenceException " ma został wyrzucony. [Break] [Continue] "

Hit [Break]. To postawi Cię na linia kodu, która powoduje problem.

Ale nie mają one zastosowania do Visual Studio 2005 (nie ma opcji Exceptions w menu Debug ).

Czy ktoś wie, gdzie znaleźć to okno dialogowe Opcje w Visual Studio, że" gdy wyjątek jest wyrzucony "Pole grupy, z opcją" włamać się do debuggera "?

Aktualizacja: problem polegał na tym, że moje menu Debug nie miało pozycji Exceptions. Dostosowałem menu do ręcznie dodaj.

Author: James Dunn, 2008-09-22

7 answers

Po otwarciu rozwiązania przejdź do Debug-Exceptions (Ctrl+D,E ) Opcja menu. Stamtąd możesz wybrać łamanie WYJĄTKÓW odrzuconych lub nieobsługiwanych przez użytkownika.

EDIT: moja instancja jest skonfigurowana Z C# "profile" może nie ma jej dla innych profili?

 134
Author: Austin Salonen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-02 16:08:48

Istnieje okno' exceptions ' w VS2005 ... try Ctrl+Alt+E podczas debugowania i kliknij pole wyboru 'wyrzucony' dla wyjątku, który chcesz zatrzymać.

 34
Author: Rob Walker,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-21 00:54:17

Zajęło mi trochę czasu, aby znaleźć nowe miejsce dla ustawień expection, więc nowa odpowiedź.

Od wersji Visual Studio 2015 możesz kontrolować, które wyjątki mają zostać wyłączone w oknie Ustawienia WYJĄTKÓW (Debug->Windows->Ustawienia WYJĄTKÓW). Skrót jest nadal Ctrl-Alt-E .

Najprostszym sposobem obsługi niestandardowych wyjątków jest wybranie opcji "wszystkie wyjątki nie na tej liście".

Oto zrzut ekranu z niemieckiego Wersja:

Tutaj wpisz opis obrazka

 9
Author: Beginner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-10-01 12:30:14

Sprawdź Zarządzanie wyjątkami za pomocą strony Debugger, wyjaśnia, jak to skonfigurować.

Zasadniczo, oto kroki (podczas debugowania):

  1. W menu Debuguj kliknij wyjątki.

  2. W oknie dialogowym wyjątki wybierz opcję wyrzuć dla całej kategorii WYJĄTKÓW, na przykład wyjątki uruchomieniowe w języku Common Language.

    -lub -

    Rozwiń węzeł dla kategorii WYJĄTKÓW, na przykład Common Language Runtime Exceptions, i wybierz rzucony dla określonego wyjątku w tej kategorii.

 6
Author: Guy Starbuck,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-10-02 15:15:42

Od wersji Visual Studio 2015 i dalej musisz przejść do okna dialogowego "Ustawienia WYJĄTKÓW" (Ctrl+Alt+E) i sprawdź" Common Language Runtime Exceptions " (lub konkretny, który chcesz np. ArgumentNullException), aby zepsuć go na obsłużonych wyjątkach.

Krok 1 Krok 1 Krok 2 Krok 2

 4
Author: Sameer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-22 11:58:01

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:

if(!GlobalTestingBool)
{
   try
   {
      SomeErrorProneMethod();
   }
   catch (...)
   {
      // ... Error handling ...
   }
}
else
{
   SomeErrorProneMethod();
}

Uważam, że daje mi to nieco większą elastyczność w zakresie testowania, ponieważ nadal są pewne wyjątki, których nie chcę, aby IDE się złamało.

 1
Author: Spencer Ruport,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-11 23:35:27

Dokumentacja online wydaje się trochę niejasna, więc zrobiłem mały test. Wybranie opcji break on wyrzucone z okna dialogowego wyjątki powoduje przerwanie wykonania programu na dowolnym wyjątku, obsłużonym lub nieobsługiwanym. Jeśli chcesz złamać tylko obsługiwane wyjątki, wydaje się, że jedynym rozwiązaniem jest przejrzenie kodu i umieszczenie punktów przerwania na wszystkich obsługiwanych wyjątkach. Wydaje się to trochę przesadne, więc może lepiej dodać instrukcję debug, gdy obsługujesz wyjątek. Następnie, gdy zobaczysz to wyjście, możesz ustawić punkt przerwania w tej linii w kodzie.

 0
Author: markysdad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-23 13:08:28