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:
O Visual Studio chama o GetExpressionContext do DE para obter um contexto de expressão que pode ser usado para avaliar expressões.
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.
O
IDebugExpressionContext2::ParseText
chama Parse para fazer o trabalho real de analisar o texto e produzir um objeto IDebugParsedExpression.O
IDebugExpressionContext2::ParseText
cria um objeto IDebugExpression2 e coloca o objetoIDebugParsedExpression
nele. Em seguida, este objetoIDebugExpression2
é retornado ao Visual Studio.O Visual Studio chama EvaluateSync para avaliar a expressão analisada.
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.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.
Conteúdo relacionado
O contexto de avaliação fornece os argumentos passados quando o mecanismo de depuração (DE) chama o avaliador de expressão (EE).