Arquitetura do avaliador de expressão

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 Avaliadores de expressão CLR e Exemplo de avaliador de expressão gerenciada.

A integração de uma linguagem proprietária no pacote de depuração do Visual Studio significa que você deve configurar as interfaces EE (avaliador de expressão) necessárias e chamar as interfaces SP (provedor de símbolo de tempo de execução) e fichário de linguagem comum. A controladora de armazenamento e os objetos de fichário, juntamente com o endereço de execução atual, são o contexto no qual as expressões são avaliadas. As informações que essas interfaces produzem e consomem representam os conceitos-chave na arquitetura de um EE.

Analisar a expressão

Quando você está depurando um programa, as expressões são avaliadas por vários motivos, mas sempre quando o programa que está sendo depurado foi interrompido em um ponto de interrupção (um ponto de interrupção colocado pelo usuário ou um causado por uma exceção). É nesse momento que o Visual Studio obtém um quadro de pilha, conforme representado pela interface IDebugStackFrame2 , do mecanismo de depuração (DE). Em seguida, o Visual Studio chama GetExpressionContext para obter a interface IDebugExpressionContext2 . Essa interface representa um contexto no qual as expressões podem ser avaliadas; ParseText é o ponto de entrada para o processo de avaliação. Até este ponto, todas as interfaces são implementadas pelo DE.

Quando IDebugExpressionContext2::ParseText é chamado, o DE instancia o EE associado ao idioma do arquivo de origem onde o ponto de interrupção ocorreu (o DE também instancia o SH neste ponto). O EE é representado pela interface IDebugExpressionEvaluator . Em seguida, o DE chama Parse para converter a expressão (em forma de texto) em uma expressão analisada, pronta para avaliação. Essa expressão analisada é representada pela interface IDebugParsedExpression . A expressão é normalmente analisada e não avaliada neste ponto.

O DE cria um objeto que implementa a interface IDebugExpression2, coloca o IDebugExpression2IDebugParsedExpression objeto no objeto e retorna o IDebugExpression2 objeto de IDebugExpressionContext2::ParseText.

Avaliar a expressão

O Visual Studio chama EvaluateSync ou EvaluateAsync para avaliar a expressão analisada. Ambos os métodos chamam EvaluateSync (IDebugExpression2::EvaluateSync chama o método imediatamente, enquanto IDebugExpression2::EvaluateAsync chama o método por meio de um thread em segundo plano) para avaliar a expressão analisada e retornar uma interface IDebugProperty2 que representa o valor e o tipo da expressão analisada. IDebugParsedExpression::EvaluateSync usa o SH, o endereço e o fichário fornecidos para converter a expressão analisada em um valor real, representado pela IDebugProperty2 interface.

Por exemplo

Depois que um ponto de interrupção é atingido em um programa em execução, o usuário escolhe exibir uma variável na caixa de diálogo QuickWatch . Essa caixa de diálogo mostra o nome da variável, seu valor e seu tipo. Normalmente, o usuário pode alterar o valor.

Quando a caixa de diálogo QuickWatch é mostrada, o nome da variável que está sendo examinada é enviado como texto para ParseText. Isso retorna um objeto IDebugExpression2 que representa a expressão analisada, neste caso, a variável. EvaluateSync é então chamado para produzir um IDebugProperty2 objeto que representa o valor e o tipo da variável, bem como seu nome. São essas informações que são exibidas.

Se o usuário alterar o valor da variável, SetValueAsString será chamado com o novo valor, que altera o valor da variável na memória para que ela seja usada quando o programa continuar a ser executado.

Consulte Exibindo locais para obter mais detalhes sobre esse processo de exibição dos valores das variáveis. Consulte Alterando o valor de um local para obter mais detalhes sobre como o valor de uma variável é alterado.

Nesta seção

Contexto de avaliação Fornece os argumentos que são passados quando o DE chama o EE.

Interfaces do avaliador de expressão-chave Descreve as interfaces cruciais necessárias ao escrever um EE, juntamente com o contexto de avaliação.