2012-07-04 8 views
9

Gdy wyjątek nie zostanie naruszony w aplikacji .NET, maszyna wirtualna wyświetla użytkownikowi komunikat o błędzie. Chciałbym móc wyświetlić swój własny komunikat o błędzie, bez konieczności umieszczania bloku catch na najwyższym poziomie mojej aplikacji (ponieważ sprawia to, że debugowanie niezatłoczonych wyjątków jest bardziej żmudne).Jak mogę przesłonić domyślne okno dialogowe wyjątków bez przechwytywania?

W tej chwili wyświetlam własne okno dialogowe błędu w detektorze zdarzeń AppDomain.UnhandledException, ale okno dialogowe utworzone przez .NET nadal się wyświetla. Chciałbym także uniknąć Environment.FailFast, ponieważ pomijałoby to moje bloki finally (do których wciąż jestem nieco przywiązany).

+0

To cecha JIT. Nie jestem pewien, czy jest sposób na modyfikację ... –

+0

Prawdopodobnie utworzyłbym zmienną konfiguracyjną trybu produkcji/trybu rozwoju, aby przełączać się pomiędzy przeglądaniem własnego okna dialogowego (i przechwytywaniem) na najwyższym poziomie, a nie oglądaniem go. To także dobry pomysł na ogólne debugowanie ... –

+1

Jest to zdecydowanie możliwe, przypomniałem sobie, że Czerwona Brama zrobiła coś na tym polu. Zobacz ten [image] (http://www.red-gate.com/products/dotnet-development/smartassembly/assets/images/error_reporting_dialog.png) i powiązany produkt [strona] (http: //www.red- gate.com/products/dotnet-development/smartassembly/learn-more/screenshots). Nie jestem pewien, czy mają darmową wersję, ale zrobili to, więc musi być jakiś sposób! – oleksii

Odpowiedz

0

Co powiesz na podobny wzór w WP7?

// Code to execute on Unhandled Exceptions 
    private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e) 
    { 
     // do stuff 
     if (System.Diagnostics.Debugger.IsAttached) 
     { 
      // An unhandled exception has occurred; break into the debugger 
      System.Diagnostics.Debugger.Break(); 
     } 
    } 
+0

Nie jestem pewien, w jaki sposób to pozwala mi wyświetlić niestandardową wiadomość. – zneak

1

Windows Forms posiada wbudowany moduł obsługi wyjątku, że domyślnie łapie nieobsługiwany wyjątek zarządzanej po podłączeniu nie debugger, a wyjątek występuje podczas przetwarzania wiadomości okiennej i jitDebugging = false w app.config. Następnie wyświetla okno dialogowe dla użytkownika końcowego i uniemożliwia zakończenie aplikacji.

Można zmienić ustawienia rejestru DbgJitDebugLaunchSetting pod HKLM \ Software \ Microsoft \ .NetFramework. Jest to jedna z trzech wartości, o których mam świadomość:

  • 0: pokazuje okno dialogowe użytkownika z pytaniem "debugowanie lub zakończenie".
  • 1: pozwala na wyjątek, aby można było sobie poradzić z CLR.
  • 2: uruchamia debagger określony w kluczu rejestru DbgManagedDebugger.

W Visual Studio, przejdź do Narzędzia> Opcje> Debugowanie> JIT ustawienie tego klucza na 0 lub 2. Ale wartość 1 jest zwykle to, co chcesz na komputerze użytkownika końcowego za

(Zobacz http://msdn.microsoft.com/en-us/library/2ac5yxx6(v=vs.90).aspx)