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ę).
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.
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:
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.
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.
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 .
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 ()}
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