调试协议处理程序

测试和调试协议处理程序实现包括了解如何启动协议处理程序。

本主题的组织方式如下:

关于调试协议处理程序

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 调试程序的示例:Debugger = 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) 中显示信息的格式化视图。

其他资源

Conceptual