3

TL;DR - Spy++ 工具如何真正构建它的进程列表?

阶段

我们有一个挂起的 MFC 桌面应用程序(在 Windows XP 上运行),它不再对任何用户输入做出反应。但是,通过 alt-tab 切换到它时会重新绘制它(它确实收到WM_SETFOCUS,WM_ACTIVATE等。它显然没有收到任何鼠标或键盘消息。)

由于该应用程序处于不确定状态,我们提取了一些进程转储,但到目前为止这些都没有什么帮助。进入:

间谍++

我们使用 Spy++ 来查找我上面提供的有关此应用程序似乎正在处理的窗口消息的信息。我们通过打开Windows 视图 视窗视图并选择我们的应用程序窗口并在消息属性中选择Windows of same processMessages to View:来做到这一点Select All

但是,我们首先尝试通过打开Spy++的进程视图来查看此进程的所有消息,但 我们的应用程序未显示在此进程列表中。在应用程序正常运行的另一台 PC 上进行交叉检查,该进程也通常显示在 Spy++ 的进程列表中。进程视图

是否可以从 Spy++ 的 Process View 中未显示该进程,但该应用程序的主窗口显示在 Windows 视图中这一事实推断出有关行为不端的应用程序的任何信息。为什么具有可见主窗口的进程不会显示在 Spy++ 的进程视图中?

该进程列在任务管理器和 Visual Studio 2005 的“附加进程”窗口中。因此,这些工具显然使用与 Spy++ 不同的方法来列出进程...?

应用程序当前挂起的系统是 Windows XP SP2 系统,我们使用了 Visual Studio 2005 附带的 Spy++ 实用程序。

该行为偶尔会再次出现,但仅在应用程序运行几天后才会出现!

4

3 回答 3

2

运行 Vista 或更高版本?你的进程可能被提升了,而 Spy++ 没有。较新版本的 Spy++ 需要提升。因此,尝试显式提升 Spy++ 并查看是否有帮助。

于 2011-11-25T14:06:12.393 回答
0

是的,当然可以从中推断出事情。在这种情况下,不要太认真地对待我所说的任何事情,我必须去看代码。但我相信 Spy 会启动并查看 EnumProcesses API。(http://msdn.microsoft.com/en-us/library/ms682629.aspx)

所以,如果你的进程没有出现在那里...... hrm。

但是,它工作的系统和不工作的系统有什么不同呢?

于 2011-11-18T10:08:35.747 回答
0

Spy++ 需要禁用注册表中的以下两个值 (0) 才能显示进程/线程列表:

HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib
HKLM\System\CurrentControlSet\Services\PerfProc\Performance

    Disable Performance Counters -> either 0 or not present

疯狂地试图找出为什么它拒绝展示它们。这是一个糟糕的笑话——这个调试器需要一个调试器才能让它工作!并不是说 WinDBG 会显示任何有意义的信息,MS 甚至没有在其符号服务器 pfft 上提供符号文件。

无论如何,也许它不会显示禁用其性能计数器的进程,因为我认为,这可以单独设置,至少对于服务,例如:

HKLM\SYSTEM\CurrentControlSet\Services\.NET CLR Networking\Performance

    Disable Performance Counters

所以它基本上总是“性能”子键的值。所有这些东西都是无证的,它使用了诸如“PerfRegQueryValue”和“PerfRegQueryInfoKey”之类的 advapi32.dll 函数......不要问我。

于 2021-06-01T19:24:46.087 回答