Compartilhar via


Depuração de manipuladores de protocolo

Entender como os manipuladores de protocolo são iniciados é essencial para testar e depurar suas implementações de manipuladores de protocolo.

Este tópico é organizado da seguinte maneira:

Sobre a depuração de manipuladores de protocolo

O processo SearchIndexer (searchindexer.exe) inicia uma cópia do processo SearchProtocolHost (SearchProtocolHost.exe) no contexto do sistema e outra cópia no contexto do usuário. Em seguida, os manipuladores de protocolo são carregados no processo SearchProtocolHost conforme necessário. Eles não são descarregados até que o serviço de pesquisa seja interrompido. A mesma instância de um manipulador de protocolo é reutilizada qualquer número de vezes enquanto o serviço estiver em execução.

Os processos SearchIndexer e SearchProtocolHost se comunicam com frequência durante a indexação. Se você pausar ou interromper o processo SearchProtocolHost para depurar, o SearchIndexer iniciará um novo processo SearchProtocolHost, invalidando sua sessão de depuração. Além disso, se você anexar o depurador diretamente ao processo SearchProtocolHost, poderá interromper a herança de manipulações do searchindexer.exe para o searchprotocolhost.exe, e os dois processos não conseguirão se comunicar.

Para evitar esses problemas, é necessário notificar o serviço de pesquisa que você está depurando e anexar o depurador ao processo SearchIndexer com instruções para depurar processos filhos, conforme descrito a seguir.

Configuração da depuração

Siga estas etapas para configurar a depuração do seu manipulador de protocolo.

  1. Notifique o serviço de pesquisa de que você está depurando, definindo o valor DebugFilters como 1 no registro:

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft
       Windows Search
          Gathering Manager
             DebugFilters = 1
    
  2. Anexe um depurador usando a chave do Registro de Opções de Execução de Arquivo de Imagem:

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion
       Image File Execution Options
          SearchIndexer.exe
             Debugger = <path to debugger> <debugger options> 
    

    As opções para um depurador de amostra estão descritas na tabela a seguir.

    Exemplo usando o depurador ntsdDepurador = C:\debuggers\ntsd.exe -odGx -c: "sxe ld mydll.dll;g"

  3. Reinicie o searchindexer.exe no depurador usando compmgmt.msc, services.msc ou uma janela de comando com comandos semelhantes aos seguintes:

    net stop wsearch
    <copy new DLLs for debugging>
    net start wsearch
    

Para distinguir entre um processo SearchProtocolHost em execução no contexto do sistema e um em execução no contexto do usuário, é possível analisar as cadeias de caracteres do ambiente. Com o ntsd.exe, por exemplo, você pode usar o comando de extensão !peb para exibir uma exibição formatada das informações no bloco de ambiente do processo (PEB).

Recursos adicionais

Conceitual