Debuggen von Protokollhandlern

Beim Testen und Debuggen Ihrer Protokollhandlerimplementierungen ist es wichtig zu verstehen, wie Protokollhandler gestartet werden.

Dieses Thema ist wie folgt organisiert:

Debuggen von Protokollhandlern

Der SearchIndexer-Prozess (searchindexer.exe) startet eine Kopie des SearchProtocolHost-Prozesses (SearchProtocolHost.exe) im Systemkontext und eine weitere Kopie im Benutzerkontext. Anschließend werden die Protokollhandler nach Bedarf im SearchProtocolHost-Prozess geladen. Sie werden erst entladen, wenn der Suchdienst beendet wird. Dieselbe Instanz eines Protokollhandlers wird beliebig oft wiederverwendet, während der Dienst ausgeführt wird.

Die SearchIndexer- und SearchProtocolHost-Prozesse kommunizieren während der Indizierung häufig miteinander. Wenn Sie den SearchProtocolHost-Prozess zum Debuggen anhalten oder beenden, startet der SearchIndexer einen neuen SearchProtocolHost-Prozess, wodurch die Debugsitzung ungültig wird. Wenn Sie Ihren Debugger direkt an den SearchProtocolHost-Prozess anfügen, können Sie zudem die Handlevererbung von „searchindexer.exe“ an „searchprotocolhost.exe“ unterbrechen, sodass die beiden Prozesse nicht kommunizieren können.

Um diese Probleme zu vermeiden, müssen Sie den Suchdienst über den Debugvorgang benachrichtigen und den Debugger mit Anweisungen zum Debuggen untergeordneter Prozesse an den SearchIndexer-Prozess anfügen. Dies wird im nächsten Schritt beschrieben.

Einrichten des Debuggens

Führen Sie die folgenden Schritte aus, um das Debuggen für den Protokollhandler einzurichten.

  1. Benachrichtigen Sie den Suchdienst über den Debugvorgang, indem Sie den Wert „DebugFilters“ in der Registrierung auf 1 festlegen:

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft
       Windows Search
          Gathering Manager
             DebugFilters = 1
    
  2. Fügen Sie einen Debugger mithilfe des Registrierungsschlüssels „Image File Execution Options“ an:

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

    Die Optionen für einen Beispieldebugger werden in der folgenden Tabelle beschrieben.

    Beispiel mit dem ntsd-Debugger:Debugger = C:\debuggers\ntsd.exe -odGx -c: "sxe ld mydll.dll;g"

  3. Starten Sie „searchindexer.exe“ unter dem Debugger neu, indem Sie compmgmt.msc, services.msc oder ein Befehlsfenster mit Befehlen wie den folgenden verwenden:

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

Um zwischen einem im Systemkontext ausgeführten SearchProtocolHost-Prozess und einem im Benutzerkontext ausgeführten Prozess zu unterscheiden, können Sie die Umgebungszeichenfolgen überprüfen. Bei „ntsd.exe“ können Sie beispielsweise den Erweiterungsbefehl !peb verwenden, um eine formatierte Ansicht der Informationen im Prozessumgebungsblock (Process Environment Block, PEB) anzuzeigen.

Zusätzliche Ressourcen

Konzept