Udostępnij przez


Rejestry

Aparat debugera może służyć do sprawdzania i zmieniania rejestrów obiektu docelowego.

Rejestry dostępne dla obiektu docelowego zależą od architektury procesora. Aby uzyskać opis rejestrów dla procesora x86, zobacz Architektura procesora. Pełny opis rejestrów dostępnych dla procesora znajduje się w dokumentacji tego procesora.

Zestaw rejestrów

Metody GetNumberRegisters można użyć do znalezienia liczby rejestrów w obiekcie docelowym.

Każdy rejestr jest określany przez jego indeks. Indeks pierwszego rejestru wynosi zero, a indeks ostatniego rejestru to liczba rejestrów minus jeden. Aby znaleźć indeks rejestru, którego nazwa jest znana, użyj polecenia GetIndexByName.

Metoda GetDescription zwraca informacje o rejestrze. Obejmuje to nazwę rejestru, typ wartości, które może przechowywać, oraz to, czy jest to podrejestrowanie.

Podrejestr to rejestr zawarty w innym rejestrze. Po zmianie podrejestrowania rejestr zawierający go również ulega zmianie. Na przykład na procesorze x86 podrejestr ax odpowiada najniższym 16 bitom 32-bitowego rejestru eax.

Istnieją trzy specjalne rejestry, których wartości można znaleźć przy użyciu następujących metod. Interpretacja wartości tych rejestrów jest zależna od platformy.

Manipulowanie rejestrami

Wartość rejestru można odczytać przy użyciu metody GetValue. Wiele rejestrów można odczytać przy użyciu poleceń GetValues i GetValues2.

Wartość można zapisać w rejestrze przy użyciu metody SetValue. Wiele rejestrów można zapisać przy użyciu SetValues i SetValues2.

Podczas zapisywania wartości w rejestrze, jeśli podana wartość ma inny typ do typu rejestru, wartość jest konwertowana na typ rejestru. Ta konwersja jest taka sama jak ta wykonywana przez metodę CoerceValue. Ta konwersja może spowodować utratę danych, jeśli typ rejestru nie może przechowywać podanej wartości.

Pseudo-Registers

Pseudorejestry są zmiennymi utrzymywanymi przez silnik debugera, który przechowuje określone wartości, na przykład $teb jest nazwą pseudorejestru, którego wartością jest adres bloku środowiska bieżącego wątku (TEB). Aby uzyskać więcej informacji i listę pseudorejestrów, zobacz Pseudo-Register Składnia.

Każdy pseudorejestrator ma indeks. Indeks jest liczbą z zakresu od zera do liczby pseudorejestrów zwracanej przez funkcję GetNumberPseudoRegisters, minus jeden. Aby znaleźć indeks pseudorejestrowania według jego nazwy, użyj polecenia GetPseudoIndexByName. Wartości pseudorejestrów można odczytywać przy użyciu polecenia GetPseudoValues, a wartości można zapisywać w pseudorejestrach przy użyciu polecenia SetPseudoValues. Aby uzyskać opis pseudorejestru, włącznie z jego typem, użyj GetPseudoDescription.

Uwaga Nie wszystkie pseudorejestry są dostępne we wszystkich sesjach debugowania lub przez cały czas podczas określonej sesji.

Wyświetlanie rejestrów

Metody OutputRegisters i OutputRegisters2 sformatują rejestry obiektu docelowego i wysyłają je do klientów jako dane wyjściowe.

Zdarzenia

Za każdym razem, gdy wartości rejestrów obiektu docelowego zmieniają się, aparat wywoła metodę wywołania zwrotnego IDebugEventCallbacks::ChangeDebuggeeState z parametrem Flags ustawionym na DEBUG_CDS_REGISTERS.