Domanda

Per favore fatemi sapere quali passi devo seguire quando i miei applicazione si blocca e si chiude la finestra di dialogo che mostra contenente "Non inviare" e "Invia segnalazione errori" pulsanti.

Che cosa posso possibilmente fare altro che guardare il Visualizzatore eventi per risolvere questo?

Grazie

È stato utile?

Soluzione

  1. Si potrebbe aggiungere un try/catch/finally costruire intorno al corpo del vostro metodo di inserimento Main().

  2. Per WinForms, è possibile aggiungere un gestore ThreadException, poco prima Application.Run (), per catturare le eccezioni sollevate nei gestori di eventi WinForms UI:

    Application.ThreadException +=
       new ThreadExceptionEventHandler(Application_ThreadException);
    
  3. Tutte le altre eccezioni non gestite possono essere catturati utilizzando:

    AppDomain.CurrentDomain.UnhandledException +=
       new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
    

    Ma vale la pena ricordare che questo consente solo di registrare / segnalare l'eccezione -. Non è possibile evitare l'applicazione di chiudere una volta che si esce da questo gestore finale

  4. Visual Studio può anche essere configurato per pausa sulla prima possibilità eccezioni e debugger esterni (come WinDbg con SoS gestiti estensioni) possono intercettare le eccezioni first-chance troppo ( http: //www.codeproject. com / KB / debug / windbg_part1.aspx ).

Inoltre, utilizzare un quadro di registrazione come log4net per aggiungere la registrazione utile per la vostra applicazione e scaricare le informazioni eccezione prima della chiusura dell'applicazione.

Altri suggerimenti

chiedere agli utenti se possono riprodurre l'errore e come. Se si riesce a riprodurre l'errore, l'esecuzione in di debug in Visual Studio e seguire la procedura per causare l'incidente. Visual Studio verrà entrare in modalità di debug in cui cattura l'errore. Modulo ci si sarà in grado di seguire la traccia dello stack e vedere quale codice sta causando l'errore. Visual Studio rende il debug piuttosto facile la maggior parte del tempo.

Idealmente si dovrebbe utilizzare una libreria di registrazione come nCollegatevi o log4net per accedere eventuali eccezioni non gestite, e le eccezioni, in generale, da loro l'accesso nel codice quando si verificano.

Può anche aiutare ad avere diversi livelli di registrazione nella vostra applicazione per aiutare a rintracciare un problema quando non è in esecuzione sul computer di sviluppo. Con nCollegatevi è possibile lasciare la registrazione nel codice di produzione e di attivare / disattivare l'uscita del registro attraverso l'uso di un file di log di configurazione.

non ho usato log4net in modo da non so se ha una funzionalità simile.

La funzione "Invia / non inviare" errori tendono ad accadere quando si dispone di un'eccezione non gestita in un thread in background (il thread principale mostrerà che continuano / smettere di dialogo .NET con una traccia dello stack).

Aggiungi un gestore di eccezioni per la funzione del tuo thread e accedere da qui:

void RunMyThread()
{
    try
    {
        // background thread code
    }
    catch (Exception ex)
    {
        // Log the exception
    }
}

Questo è molto semplificata, e non può essere come si desidera gestire un'eccezione. Ma spero che questo ti porterà a muoversi nella direzione giusta.

Usa WinDBG eseguire il debug del problema. Si può rendere pausa (come in sosta su un punto di interruzione) quando viene generata un'eccezione, e quindi esaminare la stacktrace ... oggetti in ambito ecc ...

Se accade presso un cliente, e non è facilmente riproducibile all'interno di un debugger sviluppatori, si potrebbe fare un po 'di debug post mortem. Mi piace usare Userdump per raccogliere un file di dump della memoria (.DMP). Poi io uso windbg per l'analisi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top