2

我正在维护一个 Windows Search 属性处理程序项目,它由 SearchFilterHost.exe 加载。不知道SearchFilterHost.exe什么时候会启动,不知道命令行参数的用法,而且我发现SearchFilterHost.exe启动后一两分钟就会退出,所以很难用调试器来附加进程调试它加载的 DLL。

如何调试 Windows Search 属性处理程序?

4

1 回答 1

1

MSDN 中的调试协议处理程序讨论了如何执行此操作。它涉及添加注册表项以使 SearchIndexer 和 SearchFilterHost 更易于调试。您可能需要获得注册表分支的所有权才能更改这些值。只需执行第一组就足以让您能够直接附加到 SearchFilterHost。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft
   Windows Search
      Gathering Manager
         DebugFilters = 1
         DisableBackOff = 1           may also be helpful

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

Example using the ntsd debugger  
Debugger = C:\debuggers\ntsd.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,以便通过搜索找到它。

于 2015-01-12T17:22:04.837 回答