Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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::GetDebugPropertychama 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::GetMethodPropertychama GetContainerField usando o objeto fornecidoIDebugAddresspara 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::GetMethodPropertyinstancia uma classe (chamadaCFieldPropertyno exemplo) que executa a interfaceIDebugProperty2para representar os locais do método. O objetoIDebugMethodFieldé colocado neste objetoCFieldPropertyjuntamente com os objetosIDebugSymbolProvider,IDebugAddresseIDebugBinder.Quando o objeto
CFieldPropertyé inicializado, getInfo é chamado no objetoIDebugMethodFieldpara obter uma estrutura FIELD_INFO que contém todas as informações exibiveis sobre o método em si.IDebugExpressionEvaluator::GetMethodPropertyretorna o objetoCFieldPropertycomo um objetoIDebugProperty2.O Visual Studio chama EnumChildren no objeto
IDebugProperty2retornado 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
IDebugProperty2de 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.