共用方式為


偵錯通訊協議處理程式

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

本主題的組織方式如下:

關於偵錯通訊協議處理程式

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

SearchIndexer 和 SearchProtocolHost 進程在編製索引期間經常通訊。 如果您暫停或停止 SearchProtocolHost 進程進行偵錯,SearchIndexer 將會啟動新的 SearchProtocolHost 進程,使偵錯會話失效。 此外,如果您將調試程式直接附加至 SearchProtocolHost 進程,您可以將句柄繼承從 searchindexer.exe 中斷至 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) 中顯示資訊的格式化檢視。

其他資源

概念