Udostępnij przez


Składnia wieloprocesora

KD i WinDbg w trybie jądra obsługują debugowanie wielu procesorów. Tego rodzaju debugowanie można wykonać na dowolnej platformie wieloprocesorowej.

Procesory są numerowane zero do n.

Jeśli bieżący procesor jest procesorem 0 (czyli jeśli jest to procesor, który obecnie spowodował, że debuger jest aktywny), możesz zbadać inne procesory inne niż bieżące (procesory jeden przez n). Nie można jednak zmienić niczego w nieaktualnych procesorach. Można wyświetlić tylko ich stan.

Wybieranie procesora

Aby wyświetlić numery procesorów bieżącego procesora, można użyć polecenia echocpunum (Pokaż numer procesora ). Dane wyjściowe tego polecenia umożliwiają natychmiastowe określanie, kiedy pracujesz w systemie wielu procesorów za pomocą tekstu w wierszu polecenia debugowania jądra.

W poniższym przykładzie 0: przed wierszem kd> wskazuje, że debugujesz pierwszy procesor na komputerze.

0: kd>

Użyj polecenia ~s (Zmień bieżący procesor), aby przełączać się między procesorami, jak pokazano w poniższym przykładzie.

0: kd> ~1s
1: kd>

Teraz debugujesz drugi procesor na komputerze.

W przypadku wystąpienia przerwania może być konieczna zmiana procesorów w systemie wieloprocesorowym i nie można zrozumieć śladu stosu. Przerwa mogła wystąpić na innym procesorze.

Określanie procesorów w innych poleceniach

Numer procesora można dodać przed kilkoma poleceniami. Ta liczba nie jest poprzedzona tyldą (~), z wyjątkiem polecenia ~S .

Uwaga Podczas debugowania w trybie użytkownika tylda służy do wskazywania wątków. Aby uzyskać więcej informacji na temat tej składni, zobacz Składnia wątku.

Identyfikatory procesorów nie muszą być jawnie określane. Zamiast tego można użyć wyrażenia liczbowego rozpoznawanego jako liczba całkowita odpowiadająca identyfikatorowi procesora. Aby wskazać, że wyrażenie powinno być interpretowane jako procesor, użyj następującej składni.

||[Expression]

W tej składni wymagane są nawiasy kwadratowe, a wyrażenie oznacza dowolne wyrażenie liczbowe rozpoznawane jako liczba całkowita odpowiadająca identyfikatorowi procesora.

W poniższym przykładzie procesor zmienia się w zależności od wartości pseudorejestrowania zdefiniowanego przez użytkownika.

||[@$t0]

przykłady

W poniższym przykładzie użyto polecenia k (Display Stack Backtrace), aby wyświetlić śledzenie stosu z procesora drugiego.

1: kd> 2k 

W poniższym przykładzie użyto polecenia r (Registers), aby wyświetlić rejestr eax procesora trzy.

1: kd> 3r eax 

Jednak następujące polecenie daje błąd składniowy, ponieważ nie można zmienić stanu procesora innego niż bieżący procesor.

1: kd> 3r eax=808080 

Punkty przerwania

Podczas debugowania jądra polecenia bp, bu, bm (Ustaw punkt przerwania) i ba (Break on Access) mają zastosowanie do wszystkich procesorów komputera z wieloma procesorami.

Na przykład, jeśli bieżący procesor to trzy, możesz wprowadzić następujące polecenie, aby umieścić punkt przerwania w SomeAddress.

1: kd> bp SomeAddress 

Następnie każdy procesor (nie tylko procesor jeden), który jest wykonywany pod tym adresem, powoduje pułapkę punktu przerwania.

Wyświetlanie informacji o procesorze

Można użyć rozszerzenia !running, aby wyświetlić stan każdego procesora na komputerze docelowym. Dla każdego procesora program !running może również wyświetlać bieżące i następne pola wątku z bloku sterowania procesem (CHRLB), stan 16 wbudowanych spinlocks w kolejce i ślad stosu.

Możesz użyć rozszerzeń !cpuinfo i !cpuid , aby wyświetlić informacje o samych procesorach.