我正在维护一个Windows Search属性处理程序项目,它由SearchFilterHost.exe加载。我不知道 SearchFilterHost.exe 什么时候启动,不知道命令行参数的用法,我发现 SearchFilterHost.exe 会在启动后一两分钟退出,所以很难使用调试器附加进程然后调试它加载的 DLL。
如何调试 Windows 搜索属性处理程序?
MSDN 中的调试协议处理程序讨论了如何执行此操作。 它涉及添加注册表项,以使 SearchIndexer 和 SearchFilterHost 更易于调试。您可能需要获得注册表分支的所有权才能更改值。只需执行第一组可能就足以让您能够直接附加到 SearchFilterHost。
HKEY_LOCAL_MACHINESOFTWAREMicrosoft
Windows Search
Gathering Manager
DebugFilters = 1
DisableBackOff = 1 may also be helpful
HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersion
Image File Execution Options
SearchIndexer.exe
Debugger = <path to debugger> <debugger options>
Example using the ntsd debugger
Debugger = C:debuggersntsd.exe -odGx -c: "sxe ld mydll.dll;g"
Option Description
-o Tells ntsd.exe to debug child prcoesses.
-d Pipes ntsd.exe through the kernel debugger to ensure the debugger is lauched on the right desktop (system context).
-g Tells ntsd.exe to exit immediately when the child terminates.
-x Disables first-chance break on access violation exceptions. The second occurrence of an access violation will break into the debugger.
-c Sets the order of commands passed ntsd.exe.
设置好后,重新启动WSearch服务,调整搜索的文件,事情应该会发生。
另外,这是其他人经历的旧线索。除此之外,它还讨论了在项目的调试设置中使用 MSDN 工具 IFiltTst。
In your Project properties window, open ‘configuration properties’, ‘debugging’; and enter the following settings:
Debugger to launch: Local Windows Debugger
Command: C:<your path here>IFiltTst.Exe
Command arguments: /i "D:<your project test folder><good file>.<extention to filter>" /v 3 /t 5 /l /d
Working directory: /i "D:<your project test folder>
Attach: No
Leave all other settings as default.
这两种方法都需要注册 DLL,以便搜索找到它。