Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
KD и WinDbg в режиме ядра поддерживают отладку нескольких процессоров. Эту отладку можно выполнить на любой многопроцессорной платформе.
Процессоры нумеруются от нуля до n.
Если текущий процессор является процессором 0 (то есть, если это процессор, который в настоящее время вызвал активность отладчика), можно проверить другие не текущие процессоры (процессоры один через n). Однако вы не можете изменить ничего в не текущих процессорах. Просматривать их состояние можно только.
Выбор обработчика
Для отображения номеров процессора текущего процессора можно использовать команду echocpunum (показать номер ЦП ). Выходные данные этой команды позволяют немедленно сообщать о работе с несколькими процессорами по тексту в командной строке отладки ядра.
В следующем примере 0: перед запросом kd> указывает, что выполняется отладка первого процессора на компьютере.
0: kd>
Используйте команду ~s (Изменить текущий процессор) для переключения между процессорами, как показано в следующем примере.
0: kd> ~1s
1: kd>
Теперь выполняется отладка второго процессора на компьютере.
Может потребоваться изменить процессоры в многопроцессорной системе, если вы столкнулись с сбоем и не можете понять трассировку стека. Возможно, разрыв произошел на другом процессоре.
Указание процессоров в других командах
Номер процессора можно добавить перед несколькими командами. Это число не предшествует тильде (~), за исключением команды ~S .
Заметка При отладке в пользовательском режиме тильда используется для указания потоков. Дополнительные сведения об этом синтаксисе см. в разделе "Синтаксис потока".
Идентификаторы процессора не нужно указывать явно. Вместо этого можно использовать числовое выражение, вычисляющееся в целое число, соответствующее идентификатору процессора. Чтобы указать, что выражение должно быть интерпретировано как обработчик, используйте следующий синтаксис.
||[Expression]
В этом синтаксисе квадратные скобки являются обязательными, и Выражение обозначает любое числовое выражение, разрешающее целое число, соответствующее идентификатору процессора.
В следующем примере обработчик изменяется в зависимости от значения определяемого пользователем псевдорегистрирующего регистра.
||[@$t0]
Примеры
В следующем примере используется команда k (Display Stack Backtrace) для отображения трассировки стека из процессора два.
1: kd> 2k
В следующем примере используется команда r (Registers) для отображения регистра eax процессора три.
1: kd> 3r eax
Однако следующая команда дает синтаксическую ошибку, так как невозможно изменить состояние процессора, отличного от текущего процессора.
1: kd> 3r eax=808080
Точки останова
Во время отладки ядра команды bp, bu, bm (Set Breakpoint) и ba (Break on Access) применяются ко всем процессорам нескольких процессоров.
Например, если текущий процессор равен трем, можно ввести следующую команду, чтобы поместить точку останова в SomeAddress.
1: kd> bp SomeAddress
Затем любой процессор (не только процессор один), который выполняется по этому адресу, вызывает ловушку точки прерывания.
Отображение сведений о обработчике
Вы можете использовать расширение !running для отображения состояния каждого процессора на целевом компьютере. Для каждого процессора !running может также отображать текущие и следующие поля потоков из блока управления процессами (PRCB), состояние 16 встроенных очередей спинлока и трассировку стека.
Расширения !cpuinfo и !cpuid можно использовать для отображения сведений о самих процессорах.