Session-Debug-Manager
Der Session Debug Manager (SDM) verwaltet eine beliebige Anzahl von Debug Engines (DE), die eine beliebige Anzahl von Programmen in mehreren Prozessen auf einer beliebigen Anzahl von Rechnern debuggen. Der SDM ist nicht nur ein Debug-Engine-Multiplexer, sondern bietet der IDE auch eine einheitliche Ansicht der Debug-Session.
Betrieb des Session Debug Managers
Der Session Debug Manager (SDM) verwaltet den DE. Auf einem Rechner kann mehr als eine Debug-Engine gleichzeitig laufen. Um die DEs zu multiplexen, verpackt der SDM eine Reihe von Schnittstellen der DEs und stellt sie dem IDE als eine einzige Schnittstelle zur Verfügung.
Um die Leistung zu erhöhen, werden einige Schnittstellen nicht gemultiplext. Stattdessen werden sie direkt vom DE aus verwendet, und die Aufrufe zu diesen Schnittstellen laufen nicht über den SDM. Beispielsweise werden Schnittstellen, die mit Speicher-, Code- und Dokumentkontexten verwendet werden, nicht gemultiplext, da sie sich auf eine bestimmte Anweisung, einen bestimmten Speicher oder ein bestimmtes Dokument in einem bestimmten Programm beziehen, das von einem bestimmten DE getestet wird. Kein anderer DE braucht an dieser Kommunikationsebene beteiligt zu sein.
Dies gilt nicht für alle Kontexte. Aufrufe der Kontextschnittstelle für die Ausdrucksbewertung erfolgen über den SDM. Während der Ausdrucksauswertung umhüllt der SDM die Schnittstelle IDebugExpression2, die er der IDE zur Verfügung stellt, da bei der Auswertung dieses Ausdrucks mehrere DEs beteiligt sein können, die Programme im selben Prozess debuggen, der möglicherweise auf demselben Thread läuft.
Der SDM fungiert in der Regel als Delegationsmechanismus, kann aber auch als Übertragungsmechanismus fungieren. Während der Auswertung von Ausdrücken fungiert der SDM beispielsweise als Broadcast-Mechanismus, der allen DEs mitteilt, dass sie Code auf einem bestimmten Thread ausführen können. Wenn der SDM ein Stoppereignis empfängt, teilt er den Programmen mit, dass sie aufhören sollen zu laufen. Wenn ein Schritt aufgerufen wird, teilt der SDM den Programmen mit, dass sie weiterlaufen können. Haltepunkte werden auch an jedes DE übertragen.
Der SDM verfolgt nicht das aktuelle Programm, den Thread oder den Stack-Frame. Die Prozess-, Programm- und Thread-Informationen werden in Verbindung mit bestimmten Debugging-Ereignissen an den SDM gesendet.