Escolhendo o melhor método para depurar um aplicativo de serviço
Há várias formas diferentes de depurar uma aplicação de serviço. Para escolher o método correto, primeiro você deve fazer duas opções: a hora em que o depurador está anexado ao aplicativo de serviço e qual configuração de depuração usar.
Há três estágios em que o depurador pode ser anexado à aplicação de serviço:
O início da inicialização do serviço. O depurador é iniciado automaticamente quando o serviço começa. Escolha essa opção se quiser depurar o código de inicialização do serviço.
A primeira vez que o serviço encontra uma exceção. O depurador é iniciado automaticamente quando ocorre uma exceção ou falha ou se o aplicativo de serviço chama a função DebugBreak. Escolha essa opção se quiser que o depurador apareça quando um problema for encontrado, mas não antes.
Depois que o serviço estiver em execução normalmente. Você pode anexar manualmente um depurador a um serviço que já está em execução a qualquer momento. Escolha esta opção se você não quiser fazer preparativos antecipados para depuração.
Há três configurações de depuração que você pode escolher:
Depuração local. Um único depurador, executado no mesmo computador que o serviço.
Depuração remota. Um servidor de depuração em execução no mesmo computador que o serviço, sendo controlado a partir de um cliente de depuração em execução em um segundo computador.
Depuração do modo de usuário controlada pelo kernel. Um depurador de modo usuário em execução no mesmo computador que o serviço, sendo controlado por um depurador de kernel em um segundo computador.
Se o serviço estiver em execução no Windows Vista ou em uma versão posterior do Windows, haverá uma restrição sobre como essas opções podem ser combinadas. Se você quiser depurar desde o início da inicialização do serviço ou a partir do momento em que uma exceção for encontrada, deverá usar a depuração remota ou a depuração do modo de usuário controlada por kernel.
Em outras palavras, você não pode usar a depuração local, a menos que planeje anexar o depurador manualmente depois que o serviço já estiver em execução. Essa restrição resulta do fato de que, nessas versões do Windows, os serviços são executados na sessão 0 e qualquer depurador que seja automaticamente iniciado e anexado ao serviço também esteja na sessão 0 e não tenha uma interface do usuário no computador em que o serviço está sendo executado.