Получение циклов ЦП из дампа пользовательского режима
В Process Explorer есть столбцы для времени процессора (до миллисекунд) и циклов процессора. Для WinDbg я знаю о !runaway
команда, а также !runaway 7
для более подробной информации, но он показывает только процессорное время.
Циклы ЦП также доступны как-то в аварийном дампе пользовательского режима?
Что я пробовал:
я смотрел на
dt nt!_KTHREAD
и я вижу, что у него есть свойство CycleTimentdll!_KTHREAD +0x000 Header : _DISPATCHER_HEADER +0x018 CycleTime : Uint8B
Я пытался запросить это свойство в
!for_each_thread
, но WinDbg отвечает, что он доступен только в режиме ядра.
Почему я хочу эти циклы процессора?
Я работаю над тренингом для JetBrains dotTrace. У него есть опция для подсчета циклов ЦП, и я хотел бы объяснить, откуда происходят эти циклы. Наверное, достаточно структуры ядра и Process Explorer, но было бы замечательно увидеть его в живом виде или после смерти в дампе пользовательского режима. Я объясняю много основ с WinDbg.
2 ответа
После реализации GetProcessTimes()
в ReactOS вы можете видеть, что информация копируется из процесса ' KPROCESS
, Так что, действительно, он только физически присутствует в дампе, который включает память ядра.
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>