Получение циклов ЦП из дампа пользовательского режима

В Process Explorer есть столбцы для времени процессора (до миллисекунд) и циклов процессора. Для WinDbg я знаю о !runaway команда, а также !runaway 7 для более подробной информации, но он показывает только процессорное время.

Циклы ЦП также доступны как-то в аварийном дампе пользовательского режима?

Process Explorer и WinDbg

Что я пробовал:

  • я смотрел на dt nt!_KTHREAD и я вижу, что у него есть свойство CycleTime

    ntdll!_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>
Другие вопросы по тегам