Partilhar via


Examinando um programa durante a depuração

Para examinar um programa durante a depuração, o depurador deve ser capaz de acessar os quadros de pilha gerenciada e avaliar expressões. As seções a seguir descrevem como um depurador usa o common language runtime (CLR) API de depuração para executar essas tarefas.

Acessando as pilhas de chamadas

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. As chamadas do depurador do ICorDebugThread::EnumerateChains método para o segmento para o qual pilha cadeias devem ser acessados para obter um ICorDebugChainEnum o 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 percorrer os quadros de pilha, chamando o ICorDebugFrameEnum::Next método.

  5. Opcionalmente, o depurador obtém o endereço IP. As chamadas do depurador do ICorDebugILFrame::GetIP método para obter o endereço IP relativas ao início da função para o quadro de pilha.

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

Avaliar expressões

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

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

  • Analise a expressão.

  • Chame 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 a expressão em uma função global e a função de compilar.

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

  • Chame a API de depuração para avaliar a função.

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

  1. O depurador obtém o valor de A. As chamadas do depurador do ICorDebugNativeFrame::GetLocalRegisterValue método para o quadro de pilha no qual a expressão é avaliada.

  2. O depurador cria um objeto de avaliação chamando o ICorDebugThread::CreateEval método para o thread no qual a expressão é avaliada.

  3. O depurador calcula o valor de MyFunc() 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

Conceitos

Visão geral de depuração do CLR

Outros recursos

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