Debug-Engine

Eine Debug-Engine (DE) arbeitet mit dem Interpreter oder Betriebssystem zusammen, um Debugging-Dienste wie Ausführungskontrolle, Haltepunkte und Ausdrucksauswertung bereitzustellen. Der DE ist für die Überwachung des Zustands eines zu debuggenden Programms zuständig. Um dies zu erreichen, verwendet der DE alle Methoden, die ihm in der unterstützten Laufzeit zur Verfügung stehen, sei es von der CPU oder von APIs, die von der Laufzeit bereitgestellt werden.

Die Common Language Runtime (CLR) bietet zum Beispiel Mechanismen zur Überwachung eines laufenden Programms über die ICorDebugXXX-Schnittstellen. Ein DE, der die CLR unterstützt, verwendet die entsprechenden ICorDebugXXX-Schnittstellen, um ein zu debuggendes Managed-Code-Programm zu verfolgen. Anschließend werden alle Statusänderungen an den Session Debug Manager (SDM) übermittelt, der diese Informationen an die Visual Studio IDE weiterleitet.

Hinweis

Eine Debug-Engine zielt auf eine bestimmte Laufzeit ab, d. h. auf das System, in dem das zu debuggende Programm läuft. Die CLR ist die Laufzeitumgebung für verwalteten Code, während die Win32-Laufzeitumgebung für native Windows-Anwendungen zuständig ist. Wenn die von Ihnen erstellte Sprache auf eine dieser beiden Laufzeiten abzielen kann, stellt Visual Studio bereits die erforderlichen Debug-Engines bereit. Alles, was Sie implementieren müssen, ist ein Ausdrucksauswerter.

Fehlersuche im Enginebetrieb

Die Überwachungsdienste werden über die DE-Schnittstellen implementiert und können dazu führen, dass das Debuggen eines Pakets zwischen verschiedenen Betriebsmodi wechselt. Weitere Informationen finden Sie unter Betriebsmodi. In der Regel gibt es nur eine DE-Implementierung pro Laufzeitumgebung.

Hinweis

Während es für Transact-SQL und JScript separate DE-Implementierungen gibt, haben VBScript und JScript ein gemeinsames DE.

Visual Studio Debugging ermöglicht die Ausführung von Debug-Engines auf zwei Arten: entweder im selben Prozess wie die Visual Studio-Shell oder im selben Prozess wie das zu debuggende Zielprogramm. Letztere Form tritt in der Regel auf, wenn der zu debuggende Prozess tatsächlich ein Skript ist, das unter einem Interpreter läuft. Die Debug-Engine muss den Interpreter genau kennen, um das Skript überwachen zu können. In diesem Fall ist der Interpreter eine Laufzeitumgebung; Debugging-Engines sind für bestimmte Laufzeitimplementierungen gedacht. Darüber hinaus kann die Implementierung eines einzelnen DE über Prozess- und Maschinengrenzen hinweg aufgeteilt werden (z. B. Remote-Debugging).

Das DE stellt die Debugging-Schnittstellen von Visual Studio zur Verfügung. Die gesamte Kommunikation erfolgt über COM. Ob das DE prozessintern, prozessextern oder auf einem anderen Computer geladen wird, hat keinen Einfluss auf die Kommunikation der Komponenten.

Der DE arbeitet mit einer Komponente zur Auswertung von Ausdrücken zusammen, damit der DE für die jeweilige Laufzeit die Syntax von Ausdrücken verstehen kann. Der DE arbeitet auch mit einer Symbolhandler-Komponente, um auf die vom Sprachcompiler erzeugten symbolischen Debug-Informationen zuzugreifen. Weitere Informationen finden Sie unter Ausdrucksauswerter und Symbolanbieter.

Weitere Informationen