Share via


偵錯通訊協定處理常式

瞭解如何啟動通訊協定處理常式是測試和偵錯通訊協定處理常式實作不可或缺的一部分。

本主題的組織方式如下:

關於偵錯通訊協定處理常式

SearchIndexer 程式 (searchindexer.exe) 會在系統內容中啟動 SearchProtocolHost 進程 (SearchProtocolHost.exe) 的一個複本,並在使用者內容中啟動另一個複本。 然後,通訊協定處理常式會視需要載入 SearchProtocolHost 進程。 在停止搜尋服務之前,它們不會卸載。 當服務執行時,會重複使用相同通訊協定處理常式的實例。

SearchIndexer 和 SearchProtocolHost 進程在編制索引期間經常通訊。 如果您暫停或停止 SearchProtocolHost 進程進行偵錯,SearchIndexer 將會啟動新的 SearchProtocolHost 進程,使偵錯會話失效。 此外,如果您將偵錯工具直接附加至 SearchProtocolHost 進程,您可以將 searchindexer.exe 的 handle-inheritance 中斷至 searchprotocolhost.exe,而且這兩個進程將無法通訊。

若要避免這些問題,您必須通知搜尋服務您正在偵錯,而且您需要將偵錯工具附加至 SearchIndexer 進程,並提供偵錯子進程的指示,如下所述。

設定偵錯

請遵循下列步驟來設定通訊協定處理常式的偵錯。

  1. 將登錄中的 DebugFilters 值設定為 1,以通知搜尋服務您正在偵錯:

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft
       Windows Search
          Gathering Manager
             DebugFilters = 1
    
  2. 使用映射檔執行選項登錄機碼附加偵錯工具:

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

    下表說明範例偵錯工具的選項。

    使用 ntsd 偵錯工具偵錯工具 = C:\debuggers\ntsd.exe -odGx -c: 「sxe ld mydll.dll;g"

  3. 使用 compmgmt.msc、services.msc 或具有類似下列命令的命令視窗,重新開機 searchindexer.exe:

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

若要區分在系統內容中執行的 SearchProtocolHost 進程,以及一個在使用者內容中執行的進程,您可以檢閱環境字串。 例如,使用 ntsd.exe,您可以使用擴充命令 !peb ,在進程環境區塊中顯示資訊的格式化檢視(PEB)。

其他資源

概念