Freigeben über


Gemeinsame Sprachlaufzeit und Ausdrucksauswertung

Wichtig

Seit Visual Studio 2015 ist diese Art der Implementierung von Ausdrucksauswertungen veraltet. Informationen zur Implementierung von CLR-Ausdrucksauswertern finden Sie im Beispiel zum Evaluator für CLR-Ausdrücke und verwaltete Ausdrücke.For information about implementing CLR expression evaluators, please see CLR expression evaluators sample.

Compiler, z. B. Visual Basic und C# (ausgesprochen C-sharp), die auf die Common Language Runtime (CLR) abzielen, erzeugen Microsoft Intermediate Language (MSIL), die später in systemeigenem Code kompiliert wird. Die CLR stellt ein Debugmodul (DE) bereit, um den resultierenden Code zu debuggen. Wenn Sie beabsichtigen, Ihre proprietäre Programmiersprache in die Visual Studio-IDE zu integrieren, können Sie sich für die Kompilierung in MSIL entscheiden und müssen daher keine eigene DE schreiben. Sie müssen jedoch einen Ausdrucksauswerter (EE) schreiben, der Ausdrücke im Kontext Ihrer Programmiersprache auswerten kann.

Diskussion (Discussion)

Computersprachenausdrücke werden in der Regel analysiert, um eine Gruppe von Datenobjekten und eine Gruppe von Operatoren zu erzeugen, die zum Bearbeiten verwendet werden. Beispielsweise kann der Ausdruck "A+B" analysiert werden, um den Additionsoperator (+) auf die Datenobjekte "A" und "B" anzuwenden, was möglicherweise zu einem anderen Datenobjekt führt. Der Gesamtsatz von Datenobjekten, Operatoren und deren Zuordnungen wird am häufigsten in einem Programm als Struktur dargestellt, wobei die Operatoren an den Knoten der Struktur und den Datenobjekten in den Verzweigungen vorhanden sind. Ein Ausdruck, der in Strukturform unterteilt wurde, wird häufig als analysierte Struktur bezeichnet.

Nachdem ein Ausdruck analysiert wurde, wird ein Symbolanbieter (SP) aufgerufen, um jedes Datenobjekt auszuwerten. Wenn beispielsweise "A" in mehreren Methoden definiert ist, muss die Frage "Welches A?" beantwortet werden, bevor der Wert von A ermittelt werden kann. Die Antwort, die vom SP zurückgegeben wird, ist etwa "Das dritte Element im fünften Stapelframe" oder "Der A, der 50 Byte über den Anfang des statischen Speichers liegt, der dieser Methode zugeordnet ist."

Neben der Erstellung von MSIL für das Programm selbst können CLR-Compiler auch sehr beschreibende Debuginformationen erzeugen, die in eine Program DataBase (PDB)-Datei geschrieben werden. Solange ein proprietärer Compiler Debuginformationen im selben Format wie die CLR-Compiler erzeugt, kann der SP des CLR diese Sprache benannte Datenobjekte identifizieren. Nachdem ein benanntes Datenobjekt identifiziert wurde, verwendet das EE ein Sammelordnerobjekt, um das Datenobjekt dem Speicherbereich zuzuordnen (oder zu binden), der den Wert dieses Objekts enthält. Die DE kann dann einen neuen Wert für das Datenobjekt abrufen oder festlegen.

Ein proprietärer Compiler kann CLR-Debugginginformationen bereitstellen, indem die ISymbolWriter Schnittstelle aufgerufen wird (die im .NET Framework im Namespace System.Diagnostics.SymbolStoredefiniert ist). Durch das Kompilieren von MSIL und Schreiben von Debuginformationen über diese Schnittstellen kann ein proprietärer Compiler die CLR DE und SP verwenden. Dadurch wird die Integration einer proprietären Sprache in die Visual Studio-IDE erheblich vereinfacht.

Wenn die CLR DE den proprietären EE aufruft, um einen Ausdruck auszuwerten, stellt die DE den EE mit Schnittstellen zu einem SP und einem Sammelordnerobjekt bereit. Daher bedeutet das Schreiben eines CLR-basierten Debugmoduls, dass es nur erforderlich ist, die entsprechenden Ausdrucksauswertungsschnittstellen zu implementieren; die CLR kümmert sich um die Bindung und die Symbolbehandlung für Sie.