Czy Mogę programowo dostosować opcje programu visual studio "Break when an exception is throwed"?

Krótko:

W Visual Studio 2008, menu Debug posiada opcję Exceptions....
Po kliknięciu tej opcji pojawi się okno dialogowe "Break when an exception is throwed", w którym zaznaczam pole obok "Common Language Runtime Exceptions".

Chcę móc zaznaczyć / odznaczyć to pole programowo.

Opracowanie:

To powoduje, że debugger się łamie, gdy jakikolwiek wyjątek CLR jest wyrzucany( Nie, gdy jest przechwytywany i ponownie wyrzucany), więc jest to świetne dla rozwiązywanie problemów.

Problem polega na tym, że łapie wszystkie wyjątki CLR, a. NET Framework zdarza się wyrzucać i łapać kilka wyjątków wewnętrznie, które również zostają złapane. Powoduje to, że debugger łamie kilka wyjątków, które naprawdę mnie nie obchodzą, ponieważ są wewnętrzne dla frameworka i nie stanowią problemu.
WCF jest szczególnie zły w tym, i jak szczęście ma to, moja aplikacja używa WCF wszędzie.

To, co chciałbym zrobić, to zmienić pole wyboru wyłącz, a gdy moja aplikacja się uruchomi (i przejdzie przez fazę połączenia WCF i wszystkie wewnętrzne wyjątki), następnie włącz ją, aby złamać wszystkie wyjątki od teraz.

  • wiem, że nie muszę mieć koca na "All CLR exceptions", jednak lista możliwych WYJĄTKÓW ma około 2 mil długości i trwa wieczność, aby przewijać i wybierać te, które chcesz (a potem co, jeśli niektóre przegapię).
Author: Cœur, 2009-05-07

6 answers

To nie odnosi się bezpośrednio do twojego pytania, ale jest poręczny akord ctrl-D + E, który wyświetla okno dialogowe debugowania WYJĄTKÓW. Ctrl + Alt + E zrobi to samo.

 8
Author: IV.,
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
2010-02-19 19:10:38

Można je włączać / wyłączać za pomocą interfejsu API automatyzacji Visual Studio (zwanego DTE). Spójrz na Debugger3.ExceptionGroups API. Na przykład:

' Turn off NullArgumentException.
Dim debugger As Debugger3 = DTE.Debugger
Dim exceptionGroup As ExceptionSettings = dbg.ExceptionGroups.Item("Common Language Runtime Exceptions")
exceptionGroup.SetBreakWhenThrown(False, "System.NullArgumentException")

Więc możesz łatwo napisać makro, aby włączyć / wyłączyć określone wyjątki. Aby wywołać makro z Twojej aplikacji możesz uruchomić "devenv / command".

Alternatywnie można użyć DTE z proc i zautomatyzować Visual Studio bezpośrednio(bez użycia makr).

Więcej informacji:

  1. dostosowywanie obsługa wyjątków w DEBUGGERZE VS
  2. Debugger3.ExceptionGroups
  3. devenv / command
  4. Jak: uzyskać odniesienia do obiektów DTE i Dte2
 30
Author: Michael Lehenbauer,
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
2013-07-30 20:29:22

Off the top of my head (so it may be nonsens) you could set the debugger to break only on unhandled CLR exceptons, then create a handler delegate/event for all exceptions during the INIT code and swallow the CLR ones (OK, OK, only in debug mode) and then remove the delegate/event at the point in the code where you want VS to start breaking on CLR exceptions.

 1
Author: Christopher Edwards,
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-05-07 00:08:04

Prawdopodobnie możesz to zrobić, tworząc makro (jak pokazano w przykładzie Michaela Lehenbauera), a następnie ponownie skonfiguruj swój punkt przerwania, aby uruchomić makro i kontynuować wykonywanie. To samo możesz zrobić na końcu sekcji Kod, na której zależy Ci, aby ponownie wyłączyć tę opcję, lub ręcznie wyłączyć ją między sesjami debugowania.

 1
Author: Jimmy,
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-05-23 12:30:25

Oczywiście, możesz to zrobić za pomocą Visual Studio add-in lub makro .

 0
Author: JP Alioto,
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-05-06 23:44:50

Jest też

If (Debugger.IsAttached) { Debugger.Break ()}

 0
Author: Protiguous,
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
2013-06-25 03:30:39