Partilhar via


Arquitetura do avaliador de expressões

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 gerenciado.

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

Analise a expressão

Quando estás a depurar um programa, as expressões são avaliadas por vários motivos, mas sempre quando o programa em depuração é interrompido num ponto de interrupção (um ponto de interrupção colocado pelo utilizador ou causado por uma exceção). É neste 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 . Esta 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 ocorreu o ponto de interrupção (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 momento.

O DE cria um objeto que implementa a interface IDebugExpression2 , coloca o IDebugParsedExpression objeto no IDebugExpression2 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 através 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 . Esta 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. É esta informação que é exibida.

Se o usuário alterar o valor da variável, SetValueAsString é chamado com o novo valor, que altera o valor da variável na memória para que ele seja usado quando o programa retomar a execução.

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 secção

O contexto de avaliação fornece os argumentos que são passados quando o DE chama o EE.

As interfaces do avaliador de expressões chave descrevem as interfaces cruciais necessárias ao escrever uma EE, juntamente com o contexto da avaliação.