2009-07-31 17 views
8

Ho un servizio di Windows che ha un numero di thread che funzionano. Tutto sta andando bene nei test, fino a quando, una volta, ho visto "il servizio Windows terminato in modo imprevisto" nel Visualizzatore eventi.Servizio di Windows terminato in modo imprevisto

Come faccio a provare a eseguire il debug in cui si sta verificando? Sono state rilevate eccezioni in circostanze normali ma non in questo caso.

Non so da dove iniziare.

JD.

+1

Usi le librerie non gestite? –

risposta

6

mettere una chiamata a System.Diagnostics.Debugger.Break() nel vostro OnStart() di callback. All'avvio del servizio, ti verrà richiesto di avviare il debugger di Visual Studio. Una volta aperto il debugger, puoi eseguire il debug da lì.

+0

Il problema che ho è che il servizio di Windows muore e non riesco a riprodurlo. In che modo il debugging è d'aiuto? Da qualche parte viene generata un'eccezione non gestita. Ho provato/eccezioni nel mio codice ma chiaramente l'eccezione non viene catturata. –

+1

Se il servizio lo sta almeno inserendo nel callback di OnStart(), quindi inserisci la chiamata a Debugger.Break() come dicevo. Non appena il debugger si apre e si ferma al punto di interruzione, vai al menu Debug e seleziona l'opzione Eccezioni. Fare clic sulla casella di controllo sotto la colonna generata per le eccezioni del Common Language Runtime. Quando si continua la sessione di debug, il debugger si interromperà dove l'eccezione è generata da anziché da dove viene rilevata. –

+0

È anche possibile inserire la chiamata Debugger.Break() nella funzione del punto di ingresso per il servizio, che è anche precedente nel processo di avvio (ovviamente) rispetto al callback di OnStart(). Fallo nel caso in cui non lo fai mai al tuo callback di OnStart(). –

Problemi correlati