Partilhar via


Exemplo de implementação de variáveis locais

Importante

No Visual Studio 2015, essa maneira de implementar avaliadores de expressão foi preterida. Para obter informações sobre como implementar avaliadores de expressão CLR, consulte os avaliadores de expressão CLR no e o exemplo de avaliador de expressão gerenciado no .

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

  1. O Visual Studio chama do mecanismo de depuração (DE) o GetDebugProperty para obter um objeto IDebugProperty2 que representa todas as propriedades do quadro de pilha, incluindo 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 agregador (IDebugBinder).

  3. IDebugExpressionEvaluator::GetMethodProperty chama GetContainerField com o objeto IDebugAddress fornecido 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. É esta 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 nesse objeto CFieldProperty junto 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 próprio método.

  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 que contém as variáveis locais do método. Esta enumeração é preenchida através de chamadas para EnumLocals e EnumArguments.

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

  10. O Visual Studio chama GetPropertyInfo para cada local para obter o nome, o valor e o tipo do local. Esta informação é exibida na janela Locais.

Nesta secção

Implementar GetMethodProperty descreve uma implementação do GetMethodProperty.

Enumerar locais descreve como o mecanismo de depuração (DE) faz uma chamada para enumerar 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 uma ou mais variáveis locais.

Obter valores locais discute a obtenção do valor local, o que requer os serviços de um objeto associador dado pelo contexto de avaliação.

Avaliar locais explica como os locais são avaliados.

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

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

Ver também