Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Модуль отладчика можно использовать для проверки и изменения регистров целевого объекта.
Регистры, доступные в целевом объекте, зависят от архитектуры процессора. Описание регистров для процессора x86 см. в разделе Архитектура процессора. Полное описание регистров, доступных для процессора, см. в документации по процессору.
Набор регистров
Для поиска количества регистров в целевом объекте можно использовать метод GetNumberRegisters .
На каждый регистр ссылается его индекс. Индекс первого регистра равен нулю, а индекс последнего регистра — это число регистров минус один. Чтобы найти индекс регистра, имя которого известно, используйте GetIndexByName.
Метод GetDescription возвращает сведения о регистре. Сюда входят имя регистра, тип значений, которые он может хранить, а также то, является ли он подрегистром.
Подрегистр — это регистр, содержащийся в другом регистре. При изменении подрегистрастра также изменяется регистр, содержащий его. Например, на процессоре x86 подрегистр ax совпадает с 16-разрядными значениями 32-разрядного регистра eax .
Существует три специальных регистра, значения которых можно найти с помощью следующих методов. Интерпретация значений этих регистров зависит от платформы.
Расположение текущей инструкции можно найти с помощью команд GetInstructionOffset и GetInstructionOffset2.
Расположение текущего слота стека процессора можно найти с помощью команд GetStackOffset и GetStackOffset2.
Расположение кадра стека для текущей функции можно найти с помощью команд GetFrameOffset и GetFrameOffset2.
Управление регистрами
Значение регистра можно считать с помощью метода GetValue. С помощью Командлетов GetValues и GetValues2 можно считывать несколько регистров.
Значение можно записать в регистр с помощью метода SetValue. Несколько регистров можно записать с помощью SetValues и SetValues2.
При записи значения в регистр, если указанное значение имеет тип, отличный от типа регистра, то значение преобразуется в тип регистра. Это преобразование совпадает с преобразованием, выполняемым методом CoerceValue. Это преобразование может привести к потере данных, если тип регистра не может содержать указанное значение.
Pseudo-Registers
Псевдорегистраторы — это переменные, поддерживаемые подсистемой отладчика, которые содержат определенные значения, например , $teb — это имя псевдорегистрала, значение которого является адресом блока среды потоков (TEB) текущего потока. Дополнительные сведения и список псевдорегистров см. в разделе Синтаксис псевдорегистров.
Каждый псевдорегистрал имеет индекс. Индекс — это число от нуля до числа псевдорегистров (возвращается GetNumberPseudoRegisters) минус единица. Чтобы найти индекс псевдорегистрала по имени, используйте getPseudoIndexByName. Значения псевдорегистров можно считывать с помощью GetPseudoValues, а значения можно записывать в псевдорегистры с помощью SetPseudoValues. Для описания псевдорегистрала, включая его тип, используйте GetPseudoDescription.
Примечание Не все псевдорегистры доступны во всех сеансах отладки или во время определенного сеанса.
Отображение регистров
Методы OutputRegisters и OutputRegisters2 форматируют регистры целевого объекта и отправляют их клиентам в качестве выходных данных.
События
При изменении значений регистров целевого объекта подсистема вызывает метод обратного вызова IDebugEventCallbacks::ChangeDebuggeeState с параметром Flags, равным DEBUG_CDS_REGISTERS.