Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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 os avaliadores de expressão CLR e o exemplo do avaliador de expressão gerenciada.
Compiladores, como Visual Basic e C# (pronuncia-se C-sharp), que se destinam ao CLR (Common Language Runtime), produzem MSIL (Microsoft Intermediate Language), que é compilado posteriormente para código nativo. O CLR fornece um DE (mecanismo de depuração) para depurar o código resultante. Se você planeja integrar sua linguagem de programação proprietária ao IDE do Visual Studio, poderá optar por compilar no MSIL e, portanto, não precisará escrever seu próprio DE. No entanto, você precisará escrever um EE (avaliador de expressão) capaz de avaliar expressões dentro do contexto da linguagem de programação.
Discussão
Expressões de linguagem de computador geralmente são analisadas para produzir um conjunto de objetos de dados e um conjunto de operadores usados para manipulá-los. Por exemplo, a expressão "A+B" pode ser analisada para aplicar o operador de adição (+) aos objetos de dados "A" e "B", possivelmente resultando em outro objeto de dados. O conjunto total de objetos de dados, operadores e suas associações geralmente são representados em um programa sob a forma de uma árvore, com os operadores nos nós da árvore e os objetos de dados nos ramos. Uma expressão que foi dividida em forma de árvore é frequentemente chamada de árvore analisada.
Depois que uma expressão é analisada, um SP (provedor de símbolos) é chamado para avaliar cada objeto de dados. Por exemplo, se "A" for definido em mais de um método, a pergunta "Qual?" deverá ser respondida antes que o valor de A possa ser apurado. A resposta retornada pelo SP é algo como "O terceiro item no quinto quadro de pilha" ou "O A que está 50 bytes além do início da memória estática alocada para esse método".
Além de produzir MSIL para o próprio programa, os compiladores CLR também podem produzir informações de depuração muito descritivas que são gravadas em um arquivo Banco de Dados de Programa (.pdb). Desde que um compilador de linguagem proprietária produza informações de depuração no mesmo formato que os compiladores CLR, o SP do CLR é capaz de identificar os objetos de dados nomeados dessa linguagem. Depois que um objeto de dados nomeado for identificado, o EE usará um objeto associador para associar (ou associar) o objeto de dados à área de memória que contém o valor desse objeto. O DE pode obter ou definir um novo valor para o objeto de dados.
Um compilador proprietário pode fornecer informações de depuração CLR chamando a interface ISymbolWriter (que está definida no namespace System.Diagnostics.SymbolStore no .NET Framework). Compilando para MSIL e gravando informações de depuração por meio dessas interfaces, um compilador proprietário pode usar o CLR DE e o SP. Isso simplifica muito a integração de uma linguagem proprietária ao IDE do Visual Studio.
Quando o CLR DE chama o EE proprietário para avaliar uma expressão, o DE fornece ao EE interfaces para um SP e um objeto associador. Portanto, escrever um mecanismo de depuração baseado em CLR significa que é necessário apenas implementar as interfaces do avaliador de expressão apropriadas; o CLR cuida da associação e do tratamento de símbolos para você.