Registros
O mecanismo de depurador pode ser usado para examinar e alterar os registros do destino.
Os registros disponíveis no destino dependem de sua arquitetura de processador. Para obter uma descrição dos registros para o processador x86, consulte Arquitetura do processador. Para obter uma descrição completa dos registros disponíveis para um processador, consulte a documentação desse processador.
O Conjunto de Registros
O método GetNumberRegisters pode ser usado para localizar o número de registros no destino.
Cada registro é referenciado por seu índice. O índice do primeiro registro é zero e o índice do último registro é o número de registros menos um. Para localizar o índice de um registro cujo nome é conhecido, use GetIndexByName.
O método GetDescription retorna informações sobre um registro. Isso inclui o nome do registro, o tipo de valores que ele pode conter e se é um subregistro.
Um subregistro é um registro contido em outro registro. Quando o subregistro é alterado, o registro que o contém também é alterado. Por exemplo, em um processador x86, o subregistro ax é o mesmo que os 16 bits baixos do registro eax de 32 bits.
Há três registros especiais cujos valores podem ser encontrados usando os métodos a seguir. A interpretação dos valores desses registros depende da plataforma.
O local da instrução atual pode ser encontrado com GetInstructionOffset e GetInstructionOffset2.
O local do slot de pilha do processador atual pode ser encontrado com GetStackOffset e GetStackOffset2.
O local do quadro de pilha para a função atual pode ser encontrado com GetFrameOffset e GetFrameOffset2.
Manipulando registros
O valor de um registro pode ser lido usando o método GetValue. Vários registros podem ser lidos usando GetValues e GetValues2.
Um valor pode ser gravado em um registro usando o método SetValue. Vários registros podem ser gravados usando SetValues e SetValues2.
Ao gravar um valor em um registro, se o valor fornecido tiver um tipo diferente para o tipo do registro, o valor será convertido no tipo do registro. Essa conversão é a mesma executada pelo método CoerceValue. Essa conversão poderá resultar em perda de dados se o tipo do registro não for capaz de manter o valor fornecido.
Pseudo-Registers
Os pseudo-registros são variáveis mantidas pelo mecanismo de depurador que contém determinados valores, por exemplo, $teb é o nome do pseudo-registro cujo valor é o endereço do TEB (Thread Environment Block) do thread atual. Para obter mais informações e uma lista dos pseudo-registros, consulte Sintaxe pseudo-registro.
Cada pseudo-registro tem um índice. O índice é um número entre zero e o número de pseudo-registros – (retornado por GetNumberPseudoRegisters) menos um. Para localizar o índice de um pseudo-registro pelo nome, use GetPseudoIndexByName. Os valores de pseudo-registros podem ser lidos usando GetPseudoValues e os valores podem ser gravados em pseudo-registros usando SetPseudoValues. Para obter uma descrição de um pseudo-registro, incluindo seu tipo, use GetPseudoDescription.
Nota Nem todos os pseudo-registros estão disponíveis em todas as sessões de depuração ou em todos os momentos em uma sessão específica.
Exibindo registros
Os métodos OutputRegisters e OutputRegisters2 formatam os registros do destino e os enviam para os clientes como saída.
Eventos
Sempre que os valores dos registros do destino forem alterados, o mecanismo chamará o método de retorno de chamada IDebugEventCallbacks::ChangeDebuggeeState com o parâmetro Flags definido como DEBUG_CDS_REGISTERS.