Scelta del metodo migliore per eseguire il debug di un'applicazione di servizio
Esistono diversi modi per eseguire il debug di un'applicazione di servizio. Per scegliere il metodo corretto, è prima necessario effettuare due scelte: l'ora in cui il debugger è collegato all'applicazione di servizio e quale configurazione di debug usare.
Esistono tre fasi in cui il debugger può essere collegato all'applicazione di servizio:
Inizio dell'avvio del servizio. Il debugger viene avviato automaticamente all'avvio del servizio. Scegliere questa opzione se si vuole eseguire il debug del codice di inizializzazione del servizio.
La prima volta che il servizio rileva un'eccezione. Il debugger viene avviato automaticamente quando si verifica un'eccezione o un arresto anomalo o se l'applicazione di servizio chiama la funzione DebugBreak
. Scegliere questa opzione se si desidera che il debugger venga visualizzato quando si verifica un problema, ma non prima. Dopo che il servizio è in esecuzione normalmente. È possibile collegare manualmente un debugger a un servizio già in esecuzione in qualsiasi momento. Scegliere questa opzione se non si desidera eseguire operazioni preliminari per il debug.
È possibile scegliere tre configurazioni di debug:
Debug locale. Un singolo debugger, in esecuzione nello stesso computer del servizio.
Debug remoto. Un server di debug in esecuzione nello stesso computer del servizio, controllato da un client di debug in esecuzione in un secondo computer.
Debug in modalità utente controllato dal kernel. Debugger in modalità utente in esecuzione nello stesso computer del servizio, che viene controllato da un debugger del kernel su un secondo computer.
Se il servizio è in esecuzione in Windows Vista o in una versione successiva di Windows, esiste una restrizione sul modo in cui queste scelte possono essere combinate. Se si vuole eseguire il debug dall'inizio dell'avvio del servizio o dal momento in cui viene rilevata un'eccezione, è necessario usare il debug remoto o il debug in modalità utente controllato dal kernel.
In altre parole, non è possibile usare il debug locale a meno che non si prevede di collegare manualmente il debugger dopo che il servizio è già in esecuzione. Questa restrizione deriva dal fatto che in queste versioni di Windows, i servizi vengono eseguiti nella sessione 0 e qualsiasi debugger avviato e collegato automaticamente al servizio è anche nella sessione 0 e non dispone di un'interfaccia utente nel computer in cui è in esecuzione il servizio.