Compartilhar via


Avaliar uma expressão da janela Inspeçã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.

Quando a execução é pausada, o Visual Studio chama o mecanismo de depuração (DE) para determinar o valor atual de cada expressão na lista de inspeção. O DE avalia cada expressão usando um avaliador de expressão (EE) e o Visual Studio exibe seu valor na janela Inspeção.

Confira a seguir uma visão geral de como uma expressão da lista de inspeção é avaliada:

  1. O Visual Studio chama o GetExpressionContext do DE para obter um contexto de expressão que pode ser usado para avaliar expressões.

  2. Para cada expressão na lista de inspeção, o Visual Studio chama ParseText para converter o texto da expressão em uma expressão analisada.

  3. O IDebugExpressionContext2::ParseText chama Parse para fazer o trabalho real de analisar o texto e produzir um objeto IDebugParsedExpression.

  4. O IDebugExpressionContext2::ParseText cria um objeto IDebugExpression2 e coloca o objeto IDebugParsedExpression nele. Em seguida, este objeto IDebugExpression2 é retornado ao Visual Studio.

  5. O Visual Studio chama EvaluateSync para avaliar a expressão analisada.

  6. O IDebugExpression2::EvaluateSync passa a chamada para EvaluateSync a fim de fazer a avaliação real e produzir um objeto IDebugProperty2 que é retornado ao Visual Studio.

  7. O Visual Studio chama GetPropertyInfo para obter o valor da expressão que é exibida na lista de inspeção.

Analisar e avaliar

Como analisar uma expressão complexa pode levar muito mais tempo do que avaliá-la, o processo de avaliação de uma expressão é dividido em duas etapas: 1) analisar a expressão e 2) avaliar a expressão analisada. Dessa forma, a avaliação pode ocorrer muitas vezes, mas a expressão precisa ser analisada apenas uma vez. A expressão analisada intermediária é retornada do EE em um objeto IDebugParsedExpression que, por sua vez, é encapsulado e retornado do DE como um objeto IDebugExpression2. O objeto IDebugExpression adia toda a avaliação para o objeto IDebugParsedExpression.

Observação

Não é necessário que um EE siga esse processo de duas etapas, mesmo que o Visual Studio assuma isso; o EE pode analisar e avaliar na mesma etapa quando EvaluateSync é chamado (é assim que a amostra MyCEE funciona, por exemplo). Se a sua linguagem puder formar expressões complexas, convém separar a etapa de análise da etapa de avaliação. Isso pode aumentar o desempenho no depurador do Visual Studio quando muitas expressões de inspeção estão sendo mostradas.

Nesta seção

A implementação de amostra da avaliação de expressão usa a amostra MyCEE para percorrer o processo de avaliação da expressão.

Avaliar uma expressão de inspeção explica o que acontece após uma análise de expressão bem-sucedida.