Определите время ожидания потока в WinDbg с дампом пользовательского режима - PullRequest
10 голосов
/ 27 марта 2011

есть ли способ в WinDbg определить, с какой даты / времени поток Windows блокируется такими функциями, как WaitForSingleObjects или WaitForMultipleObjects?

Я знаю, как это сделать при отладке ядра (используя !thread), но я не знаю, как это сделать при отладке в пользовательском режиме.

1 Ответ

8 голосов
/ 29 марта 2011

В WinDbg вы можете использовать !runaway для получения времени потоков:

!runaway
!runaway 1

(время пользователя)

!runaway 2

(время ядра)

!runaway 4

(прошедшее время)

(в некоторых местах вы найдете их в виде 0, 1 и 2, но по моему опыту они не работают. Возможно, это зависит от версии WinDbg или чего-то еще ...)

Вы можете вычислить время, потраченное на приостановку, вычитая время пользователя и ядра потока из его истекшего времени, но, к сожалению, я не знаю ни одного способа (кроме написания плагина WinDbg), чтобы заставить WinDbg сделать это за вас.

Если вы не настроены на WinDbg, вы можете использовать Process Explorer для получения той же информации. Когда вы щелкаете правой кнопкой мыши по процессу и выбираете вкладку потоков в диалоге свойств, вы получаете список всех потоков в процессе. Выбор конкретного потока покажет ту же информацию о времени, среди прочего.

...