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