2012-07-04 13 views
9

Quando un'eccezione viene ignorata in un'app .NET, la macchina virtuale visualizza un messaggio di errore per l'utente. Mi piacerebbe essere in grado di visualizzare il mio messaggio di errore, senza dover mettere un blocco catch al livello più alto della mia app (perché questo rende il debugging delle eccezioni non rilevate più noiose).Come posso sovrascrivere la finestra di dialogo delle eccezioni non rilevate di default?

In questo momento visualizzo la mia finestra di dialogo di errore in un listener di eventi AppDomain.UnhandledException, ma la finestra di dialogo creata con .NET viene comunque visualizzata. Mi piacerebbe anche evitare Environment.FailFast in quanto ciò ignorerebbe i miei blocchi finally (a cui sono ancora un po 'collegato).

+0

Questa è una caratteristica del JIT. Non sono sicuro che ci sia un modo per modificarlo ... –

+0

Probabilmente creerei una variabile di configurazione modalità di sviluppo/modalità di produzione per passare dalla visualizzazione alla finestra di dialogo (e alla cattura) nel livello principale e non alla visualizzazione. È anche una buona idea in generale per il debug ... –

+1

È sicuramente possibile, ho ricordato che Red Gate ha fatto qualcosa in questo campo. Vedere questo [immagine] (http://www.red-gate.com/products/dotnet-development/smartassembly/assets/images/error_reporting_dialog.png) e il prodotto correlato [pagina] (http: //www.red- gate.com/products/dotnet-development/smartassembly/learn-more/screenshots). Non sono sicuro che abbiano una versione gratuita, ma hanno fatto questo, quindi deve esserci un modo! – oleksii

risposta

0

Che ne dici di un modello simile in 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

Non sono sicuro di come questo mi consente di visualizzare un messaggio personalizzato. – zneak

1

Windows Form ha un gestore di eccezioni built-in che per default cattura un'eccezione non gestita gestito quando non debugger è collegato, e l'eccezione si verifica durante l'elaborazione del messaggio finestra, e jitDebugging = false in app.config. Quindi mostra una finestra di dialogo all'utente finale e impedisce la terminazione dell'app.

È possibile modificare l'impostazione DbgJitDebugLaunchSetting Registro di HKLM \ Software \ Microsoft \ .NetFramework. Questo è uno dei tre valori di cui sono a conoscenza:

  • 0: mostra la finestra di dialogo utente che richiede "debug o termina".
  • 1: consente di eseguire un'eccezione per CLR.
  • 2: avvia il debugger specificato nella chiave di registro DbgManagedDebugger.

In Visual Studio, andare a Strumenti> Opzioni> Debugging> JIT per impostare questa chiave su 0 o 2. Ma un valore di 1 è di solito quello che si vuole sulla macchina di un utente finale

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

Problemi correlati