Process Explorer具有CPU时间(低至毫秒)和CPU周期的列。对于WinDbg,我知道!runaway
命令,还有!runaway 7
以获取更多详细信息,但它仅显示CPU时间。
在用户模式崩溃转储中,CPU周期是否也以某种方式可用?
我尝试过:
我查看了dt nt!_KTHREAD
,我发现它有一个CycleTime属性
ntdll!_KTHREAD
+0x000 Header : _DISPATCHER_HEADER
+0x018 CycleTime : Uint8B
我试图在!for_each_thread
中查询该属性,但WinDbg仅响应它在内核模式下可用。
为什么我要这些CPU周期?
我正在为JetBrains dotTrace进行培训。它有一个计算CPU周期的选项,我想解释这个周期的来源。上面的内核结构和Process Explorer可能已经足够了,但是在用户模式转储中看到它是实时的或者是死后会很棒。我用WinDbg解释了许多基础知识。
答案 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>