Compartilhar via


Implementação de exemplo de locais

Importante

No Visual Studio 2015, essa forma de implementar avaliadores de expressão é preterida. Para obter informações sobre como implementar avaliadores de expressão CLR, confira Avaliadores de expressão CLR e Exemplo de avaliador de expressão gerenciada.

Veja a seguir uma visão geral de como o Visual Studio obtém os locais de um método do avaliador de expressão (EE):

  1. O Visual Studio chama o GetDebugProperty do mecanismo de depuração para obter um objeto IDebugProperty2 que representa todas as propriedades do quadro de pilha de execução, inclusive as variáveis locais.

  2. IDebugStackFrame2::GetDebugProperty chama GetMethodProperty para obter um objeto que descreve o método no qual o ponto de interrupção aconteceu. O DE fornece um provedor de símbolos (IDebugSymbolProvider), um endereço (IDebugAddress) e um associador (IDebugBinder).

  3. IDebugExpressionEvaluator::GetMethodProperty chama GetContainerField usando o objeto fornecido IDebugAddress para obter um IDebugContainerField que representa o método que contém o endereço especificado.

  4. A interface IDebugContainerField é consultada para a interface IDebugMethodField. É essa interface que dá acesso às variáveis locais do método.

  5. IDebugExpressionEvaluator::GetMethodProperty instancia uma classe (chamada CFieldProperty no exemplo) que executa a interface IDebugProperty2 para representar os locais do método. O objeto IDebugMethodField é colocado neste objeto CFieldProperty juntamente com os objetos IDebugSymbolProvider, IDebugAddresse IDebugBinder.

  6. Quando o objeto CFieldProperty é inicializado, getInfo é chamado no objeto IDebugMethodField para obter uma estrutura FIELD_INFO que contém todas as informações exibiveis sobre o método em si.

  7. IDebugExpressionEvaluator::GetMethodProperty retorna o objeto CFieldProperty como um objeto IDebugProperty2.

  8. O Visual Studio chama EnumChildren no objeto IDebugProperty2 retornado com o filtro guidFilterLocalsPlusArgs, que retorna um objeto IEnumDebugPropertyInfo2 contendo as variáveis locais do método. Essa enumeração é preenchida por chamadas para EnumLocals e EnumArguments.

  9. O Visual Studio chama Avançar para obter uma estrutura de DEBUG_PROPERTY_INFO para cada local. Essa estrutura contém um ponteiro para uma interface IDebugProperty2 de um local.

  10. O Visual Studio chama GetPropertyInfo para cada local para obter o nome, o valor e o tipo do local. Essas informações são exibidas na janela Locais.

Nesta seção

Implementar GetMethodProperty descreve uma implementação do GetMethodProperty.

Enumerar locais descreve como o DE (mecanismo de depuração) faz uma chamada para fazer uma enumeração de variáveis ou argumentos locais.

Obter propriedades locais descreve como o DE faz uma chamada para obter o nome, o tipo e o valor de um ou mais locais.

Obter valores locais discute como obter o valor da variável local, o que requer os serviços de um objeto associador fornecido pelo contexto de avaliação.

Avaliar locais explica como os locais são avaliados.

contexto de avaliação fornece os argumentos que são passados quando o DE chama o avaliador de expressão (EE).

Exemplo do MyCEE demonstra uma abordagem de implementação para criar um avaliador de expressão para a linguagem MyC.

Consulte também