Verwendung von Callback-Objekten
Es gibt drei Callback-COM-ähnliche Schnittstellen, die von der Engine verwendet werden: IDebugEventCallbacks, um Debugger-Erweiterungen und Anwendungen über Änderungen an der Engine oder dem Ziel zu benachrichtigen, IDebugInputCallbacks, um Eingaben anzufordern, und IDebugOutputCallbacks, um Ausgaben zu senden.
Callback-Objekte werden bei Clients registriert. Für jeden Client kann höchstens eine Instanz jeder der drei Callback-Schnittstellen registriert werden (die Unicode- und die ASCII-Version einer Schnittstelle zählen als dieselbe Schnittstelle).
Wenn ein Client erstellt wird, merkt sich die Engine den Thread, in dem er erstellt wurde. Die Engine verwendet diesen Thread immer dann, wenn sie eine beim Client registrierte Callback-Instanz aufruft. Wenn der Thread in Gebrauch ist, stellt die Engine die erforderlichen Aufrufe in eine Warteschlange. Um der Engine die Möglichkeit zu geben, diese Aufrufe zu tätigen, sollte die Methode DispatchCallbacks immer dann aufgerufen werden, wenn der Thread eines Clients im Leerlauf ist. Die Methode ExitDispatch veranlasst DispatchCallbacks zur Rückkehr. Wenn es sich bei dem Thread um denselben Thread handelt, der zum Starten der Debugger-Sitzung verwendet wurde, dann kann die Engine die Callback-Aufrufe während der Methode WaitForEvent durchführen und DispatchCallbacks muss nicht aufgerufen werden.
Die Methode FlushCallbacks weist die Engine an, alle gepufferten Ausgaben an die Ausgabe-Callbacks zu senden.
Ereignis-Callback-Objekte
Die Schnittstelle IDebugEventCallbacks wird von der Engine verwendet, um die Erweiterungen und Anwendungen des Debuggers über Ereignisse und Änderungen an der Engine und dem Ziel zu informieren. Eine Implementierung von IDebugEventCallbacks kann bei einem Client mit SetEventCallbacks registriert werden. Die aktuelle Implementierung, die bei einem Client registriert ist, kann mit GetEventCallbacks ermittelt werden. Die Anzahl der für alle Clients registrierten Ereignis-Callbacks können Sie mit GetNumberEventCallbacks ermitteln.
Weitere Informationen darüber, wie die Engine-Ereignisse verwaltet, finden Sie unter Überwachung von Ereignissen.
Eingabe-Callback-Objekte
Die Schnittstelle IDebugInputCallbacks wird von der Engine verwendet, um Eingaben von Erweiterungen und Anwendungen des Debuggers anzufordern. Eine Implementierung von IDebugInputCallbacks kann bei einem Client mit SetInputCallbacks registriert werden. Die aktuelle Implementierung, die bei einem Client registriert ist, kann mit GetInputCallbacks ermittelt werden. Die Anzahl der bei allen Clients registrierten Eingabe-Callbacks können Sie mit GetNumberInputCallbacks ermitteln.
Einzelheiten darüber, wie die Engine Eingaben verwaltet, finden Sie unter Eingabe und Ausgabe.
Ausgabe-Callback-Objekte
Die Schnittstelle IDebugOutputCallbacks wird von der Engine verwendet, um Ausgaben an die Erweiterungen und Anwendungen des Debuggers zu senden. Eine Implementierung von IDebugOutputCallbacks kann bei einem Client mit SetOutputCallbacks registriert werden. Die aktuelle Implementierung, die bei einem Client registriert ist, finden Sie mit GetOutputCallbacks. Die Anzahl der für alle Clients registrierten Ausgabe-Callbacks können Sie mit GetNumberOutputCallbacks ermitteln.
Einzelheiten darüber, wie die Engine die Ausgabe verwaltet, finden Sie unter Eingabe und Ausgabe.
Hinweis Wie für COM-Objekte typisch, ruft die Engine IUnknown::AddRef bei einem Callback-COM-Objekt auf, wenn es bei einem Client registriert wird, und IUnknown::Release, wenn das Objekt ersetzt oder der Client gelöscht wird.