Partilhar via


Avaliar uma expressão na 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 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 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 monitoraçã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 IDebugExpression2 objeto é retornado ao 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.

Analise e avalie

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. Desta forma, a avaliação pode ocorrer muitas vezes, mas a expressão precisa ser analisada apenas uma vez. A expressão intermediária analisada é retornada do EE em um objeto IDebugParsedExpression que, por sua vez, é encapsulado e retornado do DE como um objeto IDebugExpression2 . IDebugExpression objeto delega toda a avaliação para o IDebugParsedExpression objeto.

Observação

Não é necessário que um EE adira 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 pode formar expressões complexas, você pode querer 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 monitoradas são mostradas.

Nesta secção

A implementação de exemplo de avaliação de expressões usa o exemplo MyCEE para percorrer o processo de avaliação de expressões.

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