最近我一直在使用ETW跟踪Win32窗口消息(
logman
,
xperf
,WPA等),这是相对简单的,因为
Microsoft-Windows-Win32k
提供程序导出的ETW事件
SendMessage
,
TranslateMessage
,
DispatchMessage
等
…但今天我需要在Windows 7 SP1计算机上执行类似的跟踪,令我惊讶的是
微软-Windows-Win32k
提供者
is very anemic
-它只暴露较粗略级别的事件,并报告窗口消息处理中的错误(例如。
UIPIMsgError
),但不是窗口消息本身。
经过一些快速的研究,显然
微软-Windows-Win32k
直到
Windows 10's first release in 2015
,这意味着在Windows 8.1、Windows 7、Vista或XP中无法使用ETW捕获这些信息。
……但收集这些数据对于许多类型的调试和故障排除任务都至关重要。对于琐碎或较小的故障排除情况,我们有Spy++,它报告任何其他窗口接收到的所有窗口消息(我已经很熟悉了
with how Spy++ works
内部),但这使得Spy++不适合对窗口消息进行大规模的拉网式跟踪,更不用说Spy++也没有用高精度的时间戳给窗口消息加时间戳了。
所以
在Windows 10之前,性能工程师或故障排除人员是如何进行因果关系分析的?