Gestori del protocollo di debug

La comprensione del modo in cui i gestori di protocollo vengono avviati è parte integrante del test e del debug delle implementazioni del gestore di protocollo.

Questo argomento è organizzato come segue:

Informazioni sui gestori del protocollo di debug

Il processo SearchIndexer (searchindexer.exe) avvia una copia del processo SearchProtocolHost (SearchProtocolHost.exe) nel contesto di sistema e un'altra copia nel contesto utente. I gestori di protocollo vengono quindi caricati nel processo SearchProtocolHost in base alle esigenze. Non vengono scaricati finché il servizio di ricerca non viene arrestato. La stessa istanza di un gestore di protocollo viene riutilizzata un numero qualsiasi di volte durante l'esecuzione del servizio.

I processi SearchIndexer e SearchProtocolHost comunicano spesso durante l'indicizzazione. Se si sospende o arresta il processo SearchProtocolHost per eseguire il debug, SearchIndexer avvierà un nuovo processo SearchProtocolHost, invalidando la sessione di debug. Inoltre, se si collega il debugger direttamente al processo SearchProtocolHost, è possibile interrompere l'ereditarietà del handle da searchindexer.exe a searchprotocolhost.exe e i due processi non saranno in grado di comunicare.

Per evitare questi problemi, è necessario notificare al servizio di ricerca che si sta eseguendo il debug ed è necessario collegare il debugger al processo SearchIndexer con istruzioni per eseguire il debug dei processi figlio, come descritto di seguito.

Configurazione del debug

Seguire questa procedura per configurare il debug per il gestore del protocollo.

  1. Notificare al servizio di ricerca che si sta eseguendo il debug impostando il valore DebugFilters su 1 nel Registro di sistema:

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft
       Windows Search
          Gathering Manager
             DebugFilters = 1
    
  2. Collegare un debugger usando la chiave del Registro di sistema Opzioni di esecuzione file immagine:

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

    Le opzioni per un debugger di esempio sono descritte nella tabella seguente.

    Esempio che usa il debuggerntsd Debugger = C:\debuggers\ntsd.exe -odGx -c: "sxe ld mydll.dll; g"

  3. Riavviare searchindexer.exe nel debugger usando compmgmt.msc, services.msc o una finestra di comando con comandi simili al seguente:

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

Per distinguere tra un processo SearchProtocolHost in esecuzione nel contesto di sistema e uno in esecuzione nel contesto utente, è possibile esaminare le stringhe di ambiente. Con ntsd.exe, ad esempio, è possibile usare il comando di estensione !peb per visualizzare una visualizzazione formattata delle informazioni nel blocco di ambiente del processo (PEB).

Risorse aggiuntive

Concettuale