Как вывести список потоков в WinDbg (отладка ядра) - PullRequest
5 голосов
/ 24 декабря 2011

Кто-нибудь знает, как я могу перечислить все потоки в WinDbg при отладке ядра. Я нашел более старые ссылки, которые говорят «~», но это не работает.

В частности, я ищу найти идентификатор потока, который вызвал событие, а именно точку останова.

Спасибо.

Ответы [ 2 ]

6 голосов
/ 24 декабря 2011

~ работает только в пользовательском режиме.Чтобы перечислить все темы в системе, это, насколько я помню, !process 0 1 (это было некоторое время).

"В частности, я ищу найти идентификатор потока, который вызвал событие, а именно точку останова."

Это утверждение не имеет особого смысла в режиме ядра.Можете ли вы рассказать подробнее о том, каков ваш сценарий?

Редактировать: Ах, теперь я понялВы хотите знать, в какой теме вы сейчас находитесь.Дайте !thread идти.

5 голосов
/ 27 декабря 2011

Вы всегда можете использовать псевдорегистр @ $ thread для ссылки на текущий объект потока:

0: kd> r @$thread
$thread=fffff80002c02cc0

Если вам нужен идентификатор потока, вам нужно выкопать его из ETHREAD.К счастью, поток @ $ вводится как указатель на ETHREAD, если вы используете оценщик C ++:

0: kd> ?? @$thread->Cid
struct _CLIENT_ID
   +0x000 UniqueProcess    : 0x00000000`00001408 Void
   +0x008 UniqueThread     : 0x00000000`0000144c Void

-scott

...