Compartilhar via


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

Integrar uma linguagem proprietária ao pacote de depuração do Visual Studio significa que você deve configurar as interfaces necessárias do avaliador de expressão (EE) e chamar as interfaces do provedor de símbolos (SP) e associador de tempo de execução da linguagem comum. Os objetos do SP e associador, 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 causado por uma exceção). É nesse momento que o Visual Studio obtém um registro de ativação, 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é agora, todas as interfaces são implementadas pelo DE.

Quando IDebugExpressionContext2::ParseText é chamado, o DE cria uma instância do EE associado à linguagem do arquivo de origem onde o ponto de interrupção ocorreu (o DE também cria uma instância do 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. Normalmente, a expressão é analisada e não avaliada neste momento.

O DE cria um objeto que implementa a interface IDebugExpression2, coloca o objeto IDebugParsedExpression no objeto IDebugExpression2 e retorna o objeto IDebugExpression2 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 associador fornecidos para converter a expressão analisada em um valor real, representado pela interface IDebugProperty2.

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, nesse caso, a variável. Depois, EvaluateSync é chamado para produzir um objeto IDebugProperty2 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 é chamado com o novo valor, o que altera o valor da variável na memória para que seja usada quando o programa retomar a execução.

Confira Exibir locais para obter mais detalhes sobre o processo de exibição dos valores das variáveis. Confira Alterar 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 passados quando o DE chama o EE.

Principais interfaces do avaliador de expressão descreve as interfaces cruciais necessárias ao gravar um EE, com o contexto de avaliação.