调试协议处理程序
测试和调试协议处理程序实现包括了解如何启动协议处理程序。
本主题的组织方式如下:
关于调试协议处理程序
SearchIndexer 进程 (searchindexer.exe) 在系统环境中启动 SearchProtocolHost 进程 (SearchProtocolHost.exe) 的一个副本,并在用户环境中启动另一个副本。 然后,会根据需要在 SearchProtocolHost 进程中加载协议处理程序。 在搜索服务停止之前不会卸载它们。 在服务运行时,将多次重复使用协议处理程序的同一实例。
SearchIndexer 和 SearchProtocolHost 进程在编制索引期间频繁通信。 如果暂停或停止 SearchProtocolHost 进程以进行调试,SearchIndexer 将启动新的 SearchProtocolHost 进程,这使调试会话失效。 此外,如果将调试程序直接附加到 SearchProtocolHost 进程,可能会破坏 searchindexer.exe 和 searchprotocolhost.exe 之间的处理继承,这两个进程将无法通信。
若要避免这些问题,需要通知搜索服务你要进行调试,并且将调试程序附加到 SearchIndexer 进程,并提供调试子进程的说明,如下所述。
设置调试
按照以下步骤为协议处理程序设置调试。
通过在注册表中将 DebugFilters 值设置为 1,通知搜索服务你正在调试:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft Windows Search Gathering Manager DebugFilters = 1
使用映像文件执行选项注册表项附加调试程序:
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"
使用 compmgmt.msc、services.msc 或命令窗口在调试程序下重启 searchindexer.exe,其命令如下所示:
net stop wsearch <copy new DLLs for debugging> net start wsearch
若要区分在系统环境中运行的 SearchProtocolHost 进程和在用户环境中运行的进程,可以查看环境字符串。 例如,使用 ntsd.exe,可以通过扩展命令“!peb”在进程环境块 (PEB) 中显示信息的格式化视图。
其他资源
- 有关创建处理程序的信息,请参阅注册 Shell 扩展。
相关主题
Conceptual