Artigo: 824344 - Última revisão: quarta-feira, 16 de Maio de 2007 - Revisão: 6.5

Como depurar serviços do Windows

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.

Nesta página

Expandir tudo | Reduzir tudo

Sumário

Este artigo passo a passo descreve como depurar um Windows serviço utilizando o depurador WinDbg (windbg.exe). Para depurar um serviço do Windows, pode anexar o depurador WinDbg o processo que aloja o serviço depois de inicia o serviço ou, pode configurar o serviço para iniciar com o WinDbg depurador anexado, de modo a que pode resolver problemas relacionados com serviço de arranque. Este artigo descreve estes dois métodos.

Requisitos

Este artigo pressupõe que está familiarizado com os seguintes tópicos:
  • Serviços do Windows
  • Depurador WinDbg

Anexar o depurador WinDbg a um serviço depois de inicia o serviço

Este método é semelhante ao método que pode utilizar para anexar um depurador a um processo e, em seguida, depurar um processo.

Utilizar o ID de processo do processo que aloja o serviço que pretende depurar

  1. Para determinar o ID de processo (PID) do processo que aloja o serviço que pretende depurar, utilize um dos seguintes métodos.
    • Método 1: Utilizar o Gestor de tarefas
      1. Clique com o botão direito do rato na barra de tarefas e, em seguida, clique em Gestor de tarefas . A caixa de diálogo Gestor de tarefas do Windows é apresentada.
      2. Clique no separador processos da caixa de diálogo Gestor de tarefas do Windows .
      3. Em Nome da imagem , clique no nome imagem do processo que aloja o serviço que pretende depurar. Tenha em atenção o ID de processo deste processo como especificado pelo valor do campo correspondente da PID .
    • Método 2: Utilizar o utilitário de lista de tarefas (tlist.exe)
      1. Clique em Iniciar e, em seguida, clique em Executar . A caixa de diálogo Executar é apresentada.
      2. Na caixa Abrir , escreva cmd e, em seguida, clique em OK .
      3. Na linha de comandos, altere o caminho directório para reflectir a localização do ficheiro tlist.exe no computador.

        Nota O ficheiro tlist.exe normalmente está localizado no seguinte directório: c:\Programas\Microsoft Files\Debugging Tools for Windows
      4. Na linha de comandos, escreva tlist para listar os nomes de imagem e o processo de IDs de todos os processos actualmente em execução no computador.

        Nota Anote o ID do processo que hospeda o serviço que deseja depurar.
  2. Numa linha de comandos, altere o caminho directório para reflectir a localização do ficheiro windbg.exe no computador.

    Nota Se numa linha de comandos não estiver aberta, siga os passos uma e b do método 1. O ficheiro windbg.exe normalmente está localizado no seguinte directório: c:\Programas\Microsoft Files\Debugging Tools for Windows.
  3. Na linha de comandos, escreva windbg ? p ProcessID /g para anexar o depurador WinDbg o processo que aloja o serviço que pretende depurar.

    Nota ProcessID é um marcador para o ID do processo que hospeda o serviço que deseja depurar.

Utilizar o nome imagem do processo que aloja o serviço que pretende depurar

Pode utilizar este método apenas se existe exactamente uma instância em execução do processo que aloja o serviço que pretende executar. Para o fazer, siga estes passos:
  1. Clique em Iniciar e, em seguida, clique em Executar . A caixa de diálogo Executar é apresentada.
  2. Na caixa Abrir , escreva cmd e, em seguida, clique em OK para abrir uma linha de comandos.
  3. Na linha de comandos, altere o caminho de directório para reflectir a localização do ficheiro windbg.exe no computador.

    Nota O ficheiro windbg.exe normalmente está localizado no seguinte directório: c:\Programas\Microsoft Files\Debugging Tools for Windows.
  4. Na linha de comandos, escreva windbg ?pn ImageName /g para anexar o depurador WinDbg o processo que aloja o serviço que pretende depurar.

    Nota ImageName é um marcador para o nome da imagem do processo que aloja o serviço que deseja depurar. O "-pn" opção da linha de comandos Especifica que o argumento da linha de comandos ImageName é o nome de imagem de um processo.

Inicie o depurador WinDbg e anexe o processo que hospeda o serviço que pretende depurar

  1. Inicie o Explorador do Windows.
  2. Localize o ficheiro windbg.exe no computador.

    Nota O ficheiro windbg.exe normalmente está localizado no seguinte directório: c:\Programas\Microsoft Files\Debugging Tools for Windows
  3. Execute o ficheiro windbg.exe juntamente com o parâmetro da linha de comandos de /g para iniciar o WinDbg depurador. O parâmetro da linha de comandos /g permite que o processo registado continuar após o ponto de quebra está definido.
  4. No menu ficheiro , clique em anexar a um processo para apresentar a caixa de diálogo anexar para execução .
  5. Clique para seleccionar o nó que corresponde ao processo que hospeda o serviço que pretende depurar e, em seguida, clique em OK .
  6. Na caixa de diálogo que aparece, clique em Sim para guardar informações base da área de trabalho. Repare que agora pode a depurar o código desassemblado do serviço.

Configurar um serviço para iniciar com o WinDbg depurador anexado

Pode utilizar este método para depurar serviços se pretender resolver problemas relacionados com serviço de arranque.
  1. Configurar as opções "Ficheiro de imagens execução". Para o fazer, utilize um dos seguintes métodos:
    • Método 1: Utilizar o Editor de sinalizadores globais (gflags.exe)
      1. Inicie o Explorador do Windows.
      2. Localize o ficheiro gflags.exe no computador.

        Nota O ficheiro gflags.exe está normalmente localizado no seguinte directório: c:\Programas\Microsoft Files\Debugging Tools for Windows.
      3. Execute o ficheiro gflags.exe iniciem sinalizadores globais Editor.
      4. Na caixa de texto Nome do ficheiro de imagem , escreva o nome de imagem do processo que aloja o serviço que pretende depurar. Por exemplo, se pretende depurar um serviço é hospedado por um processo que tenha MyService.exe como o nome da imagem, escreva MyService.exe .
      5. Em destino , clique para seleccionar a opção de Opções do ficheiro de imagem .
      6. Em Opções de depurador de imagem , clique para seleccionar a caixa de verificação debugger .
      7. Na caixa de texto depurador , escreva o caminho completo de depurador que pretende utilizar. Por exemplo, se pretender utilizar o depurador WinDbg para depurar um serviço, pode escrever um caminho completo que é semelhante à seguinte: C:\Programas\Microsoft Files\Debugging ferramentas para Windows\windbg.exe
      8. Clique em Aplicar e, em seguida, clique em OK para sair do Editor de sinalizadores globais.
    • Método 2: Utilizar o Editor de registo
      1. Clique em Iniciar e, em seguida, clique em Executar . A caixa de diálogo Executar é apresentada.
      2. Na caixa Abrir , escreva regedit e, em seguida, clique em OK para iniciar o Editor de registo.
      3. importante Esta secção, método ou tarefa contém passos que indicam como modificar o registo. No entanto, poderão ocorrer problemas graves se modificar o registo de forma incorrecta. Por conseguinte, certifique-se de que segue estes passos cuidadosamente. Criar uma para protecção adicional, cópia de segurança do registo antes de o modificar. Em seguida, pode restaurar o registo se ocorrer um problema. Para obter mais informações sobre como efectuar uma cópia de segurança e restaurar o registo, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
        322756  (http://support.microsoft.com/kb/322756/ ) Como efectuar uma cópia de segurança e restaurar o registo no Windows


        No Editor de registo, localize e, em seguida, com o botão direito do rato na seguinte subchave do registo:
        HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options
      4. Aponte para Novo e, em seguida, clique em chave . No painel da esquerda do Editor de registo, repare que nova chave # 1 (o nome de uma nova subchave de registo) está seleccionado para edição.
      5. Escreva ImageName para substituir a nova chave # 1 e, em seguida, prima ENTER.

        Nota ImageName é um marcador para o nome da imagem do processo que aloja o serviço que deseja depurar. Por exemplo, se pretende depurar um serviço é hospedado por um processo que tenha MyService.exe como o nome da imagem, escreva MyService.exe .
      6. Com o botão direito do rato a subchave do registo que criou no passo "e".
      7. Aponte para Novo e, em seguida, clique em Valor da cadeia . No painel da direita do Editor de registo, repare que o novo valor # 1 , o nome de uma nova entrada de registo, está seleccionada para edição.
      8. Substituir novo valor # 1 depurador e, em seguida, prima ENTER.
      9. Clique com o botão direito do rato a entrada de registo debugger que criou no passo h e, em seguida, clique em Modificar . A caixa de diálogo Editar cadeia é apresentada.
      10. Na caixa de texto dados do valor , escreva DebuggerPath e, em seguida, clique em OK .

        Nota DebuggerPath é um marcador para o caminho completo de depurador que pretende utilizar. Por exemplo, se pretender utilizar o depurador WinDbg para depurar um serviço, pode escrever um caminho completo que é semelhante à seguinte:
        C:\Progra~1\Debugg~1\windbg.exe
  2. Para a janela depurador apareça no ambiente de trabalho e para interagir com o depurador, tornar o serviço interactivos. Se não efectuar o serviço interactivo, o depurador será iniciado mas não conseguir visualizar e não pode emitir comandos. Para tornar o serviço interactivo, utilize um dos seguintes métodos:
    • Método 1: Utilizar a consola de serviços
      1. Clique em Iniciar e, em seguida, aponte para programas .
      2. No menu programas , aponte para Ferramentas administrativas e, em seguida, clique em Serviços . Aparece a consola de Serviços .
      3. No painel da direita dos Serviços da consola, clique com o botão direito do rato ServiceName e clique em Propriedades .

        Nota ServiceName é um marcador para o nome do serviço que deseja depurar.
      4. No separador Iniciar sessão no , clique para seleccionar a caixa de verificação Permitir que o serviço interagir com o ambiente de trabalho na conta sistema local e, em seguida, clique em OK .
    • Método 2: Utilizar o Editor de registo
      1. No Editor de registo, localize e, em seguida, clique na seguinte subchave do registo:
        HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ServiceName
        Nota Substitua ServiceName o nome do serviço que pretende depurar. Por exemplo, se pretende depurar um serviço denominado Omeuserviço, localize e, em seguida, clique na seguinte chave de registo:
        HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MyService
      2. No campo nome no painel da direita do Editor de registo, clique com o botão direito do rato em Type e, em seguida, clique em Modificar . A caixa de diálogo Editar valor DWORD aparece.
      3. Alterar o texto dos dados do valor de caixa de texto ao resultado da operação ou binária com o valor binário de texto actual e o valor binário, 0x00000100, como os dois operandos. O valor binário, 0x00000100, corresponde à constante SERVICE_INTERACTIVE_PROCESS definido no ficheiro de cabeçalho WinNT.h no computador. Esta constante Especifica que um serviço interactivo por natureza.
  3. Quando um serviço é iniciado, o serviço comunica para o serviço Gestor de controlo quanto o serviço necessários para iniciar (o período de tempo limite para o serviço). Se o Gestor de controlo de serviços não receber um aviso de "serviço foi iniciado" do serviço no período de tempo limite, o Gestor de controlo de serviços termina o processo que aloja o serviço. Este período de limite de tempo é normalmente menos de 30 segundos. Se não ajustar este período de tempo limite, o Gestor de controlo de serviços termina o processo e o depurador anexado enquanto está a tentar efectuar a depuração. Para ajustar este período de tempo limite, siga estes passos:
    1. No Editor de registo, localize e, em seguida, com o botão direito do rato na seguinte subchave do registo:
      HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control
    2. Aponte para Novo e, em seguida, clique em Valor DWORD (DWORD Value) . No painel da direita do Editor de registo, repare que o novo valor # 1 (o nome de uma nova entrada de registo) está seleccionado para edição.
    3. Escreva ServicesPipeTimeout para substituir novo valor # 1 e, em seguida, prima ENTER.
    4. Clique com o botão direito do rato ServicesPipeTimeout movimento de registo que criou no passo c e, em seguida, clique em Modificar . A caixa de diálogo Editar valor DWORD aparece.
    5. Na caixa de texto dados do valor , escreva TimeoutPeriod e, em seguida, clique em OK

      Nota TimeoutPeriod é um marcador para o valor do período de tempo limite (em milissegundos) que pretende definir para o serviço. Por exemplo, se pretender definir o período de tempo limite para 24 horas (86400000 milissegundos), escreva 86400000 .
    6. Reinicie o computador. Tem de reiniciar o computador para serviço de Gestor de controlo para aplicar esta alteração.
  4. Inicie o serviço do Windows. Para o fazer, siga estes passos:
    1. Clique em Iniciar e, em seguida, aponte para programas .
    2. No menu programas , aponte para Ferramentas administrativas e, em seguida, clique em Serviços . Aparece a consola de Serviços .
    3. No painel da direita dos Serviços da consola, clique com o botão direito do rato ServiceName e clique em Iniciar .

      Nota ServiceName é um marcador para o nome do serviço que deseja depurar.

Resolução de problemas

Antes de tentar um serviço de depuração através de uma rede, certifique-se de que os símbolos e os ficheiros de origem que utiliza o serviço estão acessíveis a partir do computador onde o serviço será executado. Para o fazer, utilize um dos seguintes métodos:
  • Conceda permissões de acesso de leitura, pelo menos, a todos os para a pasta no computador que contém os símbolos e os ficheiros de origem que utiliza o serviço.
  • Copie estes ficheiros de origem que o serviço utiliza e símbolos para o computador onde o serviço será executado.

Referências

Para transferir as ferramentas e utilitários mencionadas neste artigo, visite o seguinte Web site da Microsoft:
Ferramentas de depuração para o Windows: Descrição geral
http://www.microsoft.com/whdc/devtools/debugging/default.mspx (http://www.microsoft.com/whdc/devtools/debugging/default.mspx)
Para obter mais informações, visite o seguinte Microsoft Developer Network) Web sites da MSDN:
Depurador WinDbg
http://www.microsoft.com/whdc/devtools/debugging/installx86.mspx (http://www.microsoft.com/whdc/devtools/debugging/installx86.mspx)
Serviços
http://msdn2.microsoft.com/en-us/library/ms685141.aspx (http://msdn2.microsoft.com/en-us/library/ms685141.aspx)
Utilizar sinalizadores globais utilitário
http://msdn2.microsoft.com/en-us/library/ms792858.aspx (http://msdn2.microsoft.com/en-us/library/ms792858.aspx)

A informação contida neste artigo aplica-se a:
  • Microsoft Windows 2000 Server
  • Microsoft Windows 2000 Advanced Server
  • Microsoft Windows 2000 Datacenter Server
  • Microsoft Windows 2000 Professional Edition
  • Microsoft Windows Server 2003 Enterprise Edition
  • Microsoft Windows Server 2003 Standard Edition
  • Microsoft Windows Server 2003 Datacenter Edition
  • Microsoft Windows XP Home Edition
  • Microsoft Windows XP Home Edition SP1
  • Microsoft Windows XP Home Edition SP1a
  • Microsoft Windows XP Home Edition SP2
  • Microsoft Windows XP Professional Edition
  • Microsoft Windows XP Professional SP1
  • Microsoft Windows XP Professional SP1a
  • Microsoft Windows XP Professional SP2
Palavras-chave: 
kbmt kbimghlp kbregistry kbservice kbdebug kbmisctools kbhowtomaster KB824344 KbMtpt
Tradução automáticaTradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 824344  (http://support.microsoft.com/kb/824344/en-us/ )