假设我有一个人为的程序:
#include <Windows.h>
void useless_function()
{
Sleep(5000);
}
void useful_function()
{
// ... do some work
useless_function();
// ... do some more work
}
int main()
{
useful_function();
return 0;
}
目标:我希望分析器告诉我useful_function()
是不必要的调用useless_function()
等待没有明显的原因。在 XPerf 下,这不会出现在我拥有的任何图表中,因为WaitForMultipleObjects()
似乎是调用 toIdle.exe
而不是我自己的程序。
这是我当前运行的 xperf 命令行:
xperf -on Latency -stackwalk Profile
有任何想法吗?
(这不仅限于等待函数。上述问题可能已通过在 处放置断点来解决NtWaitForMultipleObjects
。理想情况下,可能有一种方法可以查看占用大量挂钟时间而不是仅 CPU 时间的堆栈样本)