Compartilhar via


Avaliar uma expressão de janela de visualização

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, consulte avaliadores de expressão CLR e exemplo de avaliador de expressão gerenciada.

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

A seguir, uma visão geral de como uma expressão de lista de observação é avaliada:

  1. O Visual Studio chama 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 observação, o Visual Studio chama ParseText para converter o texto da expressão em uma expressão analisada.

  3. IDebugExpressionContext2::ParseText chama Parse para fazer o trabalho real de análise do texto e produzir um objeto IDebugParsedExpression .

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

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

  6. IDebugExpression2::EvaluateSync passa a chamada para EvaluateSync para 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 observação.

Analisar, em seguida, avaliar

Como a análise de uma expressão complexa pode levar muito mais tempo do que avaliá-la, o processo de avaliar 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 IDebugExpression objeto adia toda a avaliação para o IDebugParsedExpression objeto.

Observação

Não é necessário que um EE adere a esse processo de duas etapas, embora o Visual Studio suponha isso; o EE pode analisar e avaliar na mesma etapa quando EvaluateSync é chamado (é assim que o exemplo MyCEE funciona, por exemplo). Se o idioma puder formar expressões complexas, talvez você queira 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 observação estão sendo mostradas.

Nesta seção

Uma implementação de exemplo para a avaliação de expressões usa o exemplo MyCEE para guiar o processo de avaliação de expressões.

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