Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
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.
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.
O depurador itera por meio de cadeias de pilha, chamando o ICorDebugChainEnum::Next método.
O depurador obtém um enumerador para os quadros de pilha na cadeia chamando o ICorDebugChain::EnumerateFrames método.
O depurador continua a percorrer os quadros de pilha chamando o ICorDebugFrameEnum::Next método.
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.
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.
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.
O depurador cria um objeto de avaliação chamando o ICorDebugThread::CreateEval método para o segmento em que a expressão é avaliada.
O depurador calcula o valor de Foo() chamando o ICorDebugEval::CallFunction método.
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