从用户模式转储中获取CPU周期

时间:2017-04-04 21:39:49

标签: windbg crash-dumps usermode

Process Explorer具有CPU时间(低至毫秒)和CPU周期的列。对于WinDbg,我知道!runaway命令,还有!runaway 7以获取更多详细信息,但它仅显示CPU时间。

在用户模式崩溃转储中,CPU周期是否也以某种方式可用?

Process Explorer vs. WinDbg

我尝试过:

  • 我查看了dt nt!_KTHREAD,我发现它有一个CycleTime属性

    ntdll!_KTHREAD
       +0x000 Header           : _DISPATCHER_HEADER
       +0x018 CycleTime        : Uint8B
    
  • 我试图在!for_each_thread中查询该属性,但WinDbg仅响应它在内核模式下可用。

为什么我要这些CPU周期?

我正在为JetBrains dotTrace进行培训。它有一个计算CPU周期的选项,我想解释这个周期的来源。上面的内核结构和Process Explorer可能已经足够了,但是在用户模式转储中看到它是实时的或者是死后会很棒。我用WinDbg解释了许多基础知识。

2 个答案:

答案 0 :(得分:0)

关注the implementation of GetProcessTimes() in ReactOS,您可以看到the information is copied from the process' KPROCESS。所以,实际上,它只存在于包含内核内存的转储中。

答案 1 :(得分:0)

C:\tw>ls -l
total 0

C:\tw>cdb -c ".dump /ma .\tw.dmp;q" calc.exe | grep writ
Dump successfully written

C:\tw>cdb -c "lm;!peb;.dump /ma .\tw1.dmp;q" calc.exe | grep writ
Dump successfully written

C:\tw>cdb -c ".ttime;q" -z tw.dmp | grep -B 3 quit
Created: Wed Apr  5 20:03:55.919 2017 ()
Kernel:  0 days 0:00:00.046
User:    0 days 0:00:00.000
quit:

C:\tw>cdb -c ".ttime;q" -z tw1.dmp | grep -B 3 quit
Created: Wed Apr  5 20:04:28.682 2017 ()
Kernel:  0 days 0:00:00.031
User:    0 days 0:00:00.000
quit:

C:\tw>