Verwenden von Clientobjekten

Eine Übersicht über die Rolle von Clientobjekten bei der Interaktion mit der Debugger-Engine finden Sie unter Clientobjekte.

Im Allgemeinen können die Methoden eines Clients nur aus dem Thread aufgerufen werden, in dem der Client erstellt wurde. In der Regel schlagen Methoden, die aus dem falschen Thread aufgerufen werden, sofort fehl. Die wichtige Ausnahme von dieser Regel ist die Methode CreateClient; Diese Methode kann von einem beliebigen Thread aufgerufen werden und gibt einen neuen Client zurück, der in dem Thread verwendet werden kann, von dem aus sie aufgerufen wurde. Weitere Ausnahmen sind im Referenzabschnitt dokumentiert.

Eine Zeichenfolge, die ein Clientobjekt beschreibt, wird von der GetIdentity-Methode zurückgegeben oder kann mithilfe von OutputIdentity in den Ausgabestream der Engine geschrieben werden.

COM-Schnittstellen

Die Debugger-Engine-API enthält mehrere COM-ähnliche Schnittstellen. sie implementieren die IUnknown-Schnittstelle .

Die im Abschnitt Debuggen von Engine-Schnittstellen beschriebenen Schnittstellen werden vom Client implementiert (wenn auch nicht unbedingt in der neuesten Version). Sie können die COM-Methode IUnknown::QueryInterface verwenden, um jede dieser Schnittstellen von einer der anderen zu erhalten.

Die Clients implementieren die IUnknown COM-Schnittstelle und verwenden sie zum Verwalten der Referenzanzahl und Schnittstellenauswahl. Die Clients sind jedoch keine registrierten COM-Objekte. Die Methode IUnknown::AddRef wird verwendet, um die Verweisanzahl für das Objekt zu erhöhen, und die Methode IUnknown::Release wird verwendet, um die Verweisanzahl zu verringern. Wenn IUnknown::QueryInterface aufgerufen wird, wird die Verweisanzahl erhöht. Wenn also kein Clientschnittstellenzeiger mehr benötigt wird, sollte IUnknown::Release aufgerufen werden, um die Verweisanzahl zu verringern.

Die Verweisanzahl wird mit 1 initialisiert, wenn das Clientobjekt mithilfe von DebugCreate oder DebugConnect erstellt wird.

Weitere Informationen dazu, wann die Verweisanzahl erhöht und verringert werden soll, finden Sie im Platform SDK.

IUnknown::QueryInterface, DebugCreate und DebugConnect verwenden jeweils eine Schnittstellen-ID als eines ihrer Argumente. Diese Schnittstellen-ID kann mithilfe des __uuidof-Operators abgerufen werden. Beispiel:

IDebugClient * debugClient;
HRESULT Hr = DebugCreate( __uuidof(IDebugClient), (void **)&debugClient );

Wichtig Die IDebug*-Schnittstellen wie die IDebugEventCallbacks-Schnittstelle sind zwar COM-ähnlich, aber keine geeigneten COM-APIs. Das Aufrufen dieser Schnittstellen aus verwaltetem Code ist ein nicht unterstütztes Szenario. Probleme wie Garbage Collection und Threadbesitz führen zu Systeminstabilität, wenn die Schnittstellen mit verwaltetem Code aufgerufen werden.