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):
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.
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).IDebugExpressionEvaluator::GetMethodProperty
chama GetContainerField usando o objeto fornecidoIDebugAddress
para obter um IDebugContainerField que representa o método que contém o endereço especificado.A interface
IDebugContainerField
é consultada para a interface IDebugMethodField. É essa interface que dá acesso às variáveis locais do método.IDebugExpressionEvaluator::GetMethodProperty
instancia uma classe (chamadaCFieldProperty
no exemplo) que executa a interfaceIDebugProperty2
para representar os locais do método. O objetoIDebugMethodField
é colocado neste objetoCFieldProperty
juntamente com os objetosIDebugSymbolProvider
,IDebugAddress
eIDebugBinder
.Quando o objeto
CFieldProperty
é inicializado, getInfo é chamado no objetoIDebugMethodField
para obter uma estrutura FIELD_INFO que contém todas as informações exibiveis sobre o método em si.IDebugExpressionEvaluator::GetMethodProperty
retorna o objetoCFieldProperty
como um objetoIDebugProperty2
.O Visual Studio chama EnumChildren no objeto
IDebugProperty2
retornado com o filtroguidFilterLocalsPlusArgs
, que retorna um objeto IEnumDebugPropertyInfo2 contendo as variáveis locais do método. Essa enumeração é preenchida por chamadas para EnumLocals e EnumArguments.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.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.
Seções relacionadas
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.