Partilhar via


Depuração de manipuladores de protocolo

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

Este tópico está organizado da seguinte forma:

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 está em execução.

Os processos SearchIndexer e SearchProtocolHost se comunicam frequentemente durante a indexação. Se você pausar ou parar o processo SearchProtocolHost para depurar, o SearchIndexer iniciará um novo processo SearchProtocolHost, invalidando sua sessão de depuração. Além disso, ao anexares o depurador diretamente ao processo SearchProtocolHost, podes interromper a herança de identificadores de searchindexer.exe para searchprotocolhost.exe, e os dois processos não conseguirão comunicar-se.

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

Configurando a depuração

Siga estes passos para configurar a depuração para o seu manipulador de protocolo.

  1. Notifique o serviço de pesquisa 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 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 exemplo são descritas na tabela a seguir.

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

  3. Reinicie 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 processo em execução no contexto do usuário, você pode revisar as cadeias de caracteres do ambiente. Com ntsd.exe, por exemplo, você pode usar o comando extension !peb para exibir uma exibição formatada das informações no bloco de ambiente de processo (PEB).

Recursos adicionais

Conceptual