Partilhar via


Examinando um programa durante a depuração

Para examinar um programa durante a depuração, o depurador deve poder acesso gerenciado quadros de pilha e avaliar expressões. As seções a seguir descrevem como um depurador usa o common linguagem tempo de execução (CLR) API de depuração para executar essas tarefas.

Acessando pilhas de telefonar

A lista a seguir fornece uma descrição passo a passo de como um depurador acessa os quadros de pilha gerenciada. O processo de depuração deve ser interrompido para acesso a quadros de pilha.

  1. O depurador obtém um enumerador para cadeias de pilha. O depurador chama a ICorDebugthread::EnumerateChains método para o thread para qual pilha cadeias devem ser acessado para obter um ICorDebugChainEnum objeto para enumerar as cadeias de pilha.

  2. O depurador itera por meio de cadeias de pilha, chamando o ICorDebugChainEnum::Next método.

  3. O depurador obtém um enumerador para os quadros de pilha na cadeia chamando o ICorDebugChain::EnumerateFrames método.

  4. O depurador continua a percorrer os quadros de pilha chamando o ICorDebugFrameEnum::Next método.

  5. O depurador, opcionalmente, obtém o endereço IP. O depurador chama a ICorDebugILFrame::GetIPmétodo para obter o endereço IP em relação ao início da função de apontador de pilha.

  6. Opcionalmente, o depurador obtém outras informações sobre o registro de ativação. Por exemplo, o depurador pode telefonar o ICorDebugFrame::GetFunctionTokenmétodo para obter o token de metadados para a função para o código que está executando o registro de ativação. O depurador pode também telefonar o ICorDebugCode::GetCode método obter um objeto que representa o código que está executando o registro de ativação.

Avaliando expressões

Expressões em código nativo não gerenciado podem ser avaliadas, usando os mesmos mecanismos que usam os depuradores convencionais.

No código gerenciado, o depurador pode avaliar uma expressão da seguinte maneira:

  • Analise a expressão.

  • telefonar a API de depuração para acessar os valores das variáveis na expressão e chamar as funções na expressão.

Como alternativa, o depurador pode fazer o seguinte:

  • Quebrar automaticamente a expressão em uma função global e compilar a função.

  • telefonar a API de depuração (edição and Continue) para adicionar a função global.

  • Chame a API de depuração se avalia a função.

A lista a seguir fornece uma descrição passo a passo de como um depurador avalia uma expressão. Neste cenário, a expressão é A + Foo() onde A presume-se em um registro e o código que está sendo depurado é gerenciado nativo código.

  1. O depurador obtém o valor de A. O depurador chama a ICorDebugNativeFrame::GetLocalRegisterValue método para o registro de ativação em que a expressão é avaliada.

  2. O depurador cria um objeto de avaliação chamando o ICorDebugThread::CreateEval método para o segmento em que a expressão é avaliada.

  3. O depurador calcula o valor de Foo() chamando o ICorDebugEval::CallFunction método.

  4. O depurador avalia a expressão. O depurador se aplica a dobra constante à expressão usando os valores obtidos nas duas etapas anteriores.

Consulte também

Outros recursos

Conceitos chave na API de depuração

Visão geral sobre depuração do CLR

Depuração (referência de API não gerenciada)