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

Quando a execução pausa, o Visual Studio chama o mecanismo de depuração (DE) para determinar o valor atual de cada expressão em sua lista de observaçã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.

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

  1. O Visual Studio chama GetExpressionContext da 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 analisar o texto e produzir um objeto IDebugParsedExpression .

  4. IDebugExpressionContext2::ParseText cria um objeto IDebugExpression2 e coloca o IDebugParsedExpression objeto nele. Esse objeto IDebugExpression2 é retornado ao Visual Studio.

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

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

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

Analisar, em seguida, 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 IDebugExpression objeto adia toda a avaliação para o IDebugParsedExpression objeto.

Observação

Não é necessário que um EE adera a 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 o exemplo MyCEE funciona, por exemplo). Se o seu idioma 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 observação estão sendo mostradas.

Nesta seção

Implementação de exemplo de avaliação de expressão Usa o exemplo MyCEE para percorrer o processo de avaliação de expressão.

Avaliando uma expressão de observação Explica o que acontece após uma análise de expressão bem-sucedida.