Verwenden von Eingabe und Ausgabe

Eine Übersicht über die Eingabe- und Ausgabedatenströme in der Debugger-Engine finden Sie unter Eingabe und Ausgabe.

Eingabe

Das Modul fragt von allen clients um Eingabe, wenn die Input-Methode auf einem Client aufgerufen wird. Die Eingabe wird an den Aufrufer von Input zurückgegeben.

Eingaberückrufe

Wenn das Modul eine Eingabe von einem Client anfordert, verwendet es das IDebugInputCallbacks-Objekt , das bei diesem Client registriert ist. Ein IDebugInputCallbacks-Objekt kann mithilfe von SetInputCallbacks bei einem Client registriert werden. Für jeden Client kann höchstens ein IDebugInputCallbacks-Objekt registriert sein.

Die Eingabeanforderung beginnt damit, dass die Engine die IDebugInputCallbacks::StartInput-Methode aufruft . Dadurch wird das IDebugInputCallbacks-Objekt darüber informiert, dass das Modul jetzt auf eine Eingabe wartet.

Wenn das IDebugInputCallbacks-Objekt über eine Eingabe für das Modul verfügt, kann es die ReturnInput-Methode eines beliebigen Clients aufrufen. Sobald die ReturnInput-Methode aufgerufen wurde, nimmt das Modul keine weitere Eingabe mehr an. Nachfolgende Aufrufer dieser Methode werden darüber informiert, dass die Eingabe nicht empfangen wurde.

Das Modul ruft dann IDebugInputCallbacks::EndInput auf, um anzugeben, dass es nicht mehr auf eingabe wartet.

Schließlich gibt das Modul diese Eingabe an das registrierte IDebugOutputCallbacks-Objekt jedes Clients (mit Ausnahme des zum Bereitstellen der Eingabe verwendeten) wieder, indem es IDebugOutputCallbacks::Output verwendet, wobei die Bitmaske auf DEBUG_OUTPUT_PROMPT festgelegt ist.

Ausgabe

Die Ausgabe kann mit mehreren Clientmethoden an die Engine gesendet werden, z. B. Output und OutputVaList. Beim Empfang der Ausgabe sendet das Modul sie an einige Clients.

Clients verwenden eine Ausgabemaske , um anzugeben, welche Ausgabetypen sie interessieren. Wenn die Ausgabe vom Modul erzeugt wird, wird sie von einer Maske begleitet, die ihren Ausgabetyp angibt. Wenn der Typ der Ausgabe mit der Ausgabemaske des Clients übereinstimmt, erhält der Client die Ausgabe. Die Ausgabemaske kann durch Aufrufen von SetOutputMask festgelegt und mithilfe von GetOutputMask abgefragt werden. Weitere Informationen zu den Ausgabemaskenwerten finden Sie unter DEBUG_OUTPUT_XXX .

Die Liste der Clients, an die die Engine die Ausgabe sendet, wird vom Ausgabesteuerelement gesteuert. In der Regel ist das Ausgabesteuerelement so festgelegt, dass die Ausgabe an alle Clients gesendet wird. sie kann jedoch vorübergehend mit ControlledOutput und ControlledOutputVaList geändert werden. Weitere Informationen zu Ausgabesteuerungswerten finden Sie unter DEBUG_OUTCTL_XXX .

Die Ausgabe kann vom Modul gepuffert werden. Wenn mehrere Ausgabeteile an die Engine übergeben werden, können diese gesammelt und in einem großen Stück an die Clients gesendet werden. Um diesen Puffer zu leeren, verwenden Sie FlushCallbacks.

Jedes Clientobjekt hat eine Ausgabebreite, d. h. die Breite der Ausgabeanzeige für das Clientobjekt. Während diese Breite nur als Hinweis verwendet wird, formatieren einige Befehle und Erweiterungsfunktionen ihre Ausgabe basierend auf dieser Breite. Die Breite wird von der GetOutputWidth-Methode zurückgegeben und kann mithilfe der SetOutputWidth-Methode festgelegt werden.

Ausgaberückrufe

Wenn die Engine die Ausgabe an einen Client sendet, verwendet sie das beim Client registrierte IDebugOutputCallbacks-Objekt . Ein IDebugOutputCallbacks-Objekt kann mithilfe von SetOutputCallbacks bei einem Client registriert werden. Für jeden Client kann höchstens ein IDebugInputCallbacks-Objekt registriert sein.

Zum Senden der Ausgabe ruft das Modul die IDebugOutputCallbacks::Output-Methode auf.

Ausgabezeilenpräfix

Jedes Clientobjekt verfügt über ein Ausgabezeilenpräfix , das jeder Ausgabezeile vorangestellt wird, die an den Ausgaberückruf gesendet wird, der dem Clientobjekt zugeordnet ist. Dies kann zum Einzug oder zum Platzieren von Identifikationsmarkierungen in jeder Ausgabezeile verwendet werden.

Das Ausgabezeilenpräfix wird von GetOutputLinePrefix zurückgegeben und kann mit SetOutputLinePrefix festgelegt werden. Verwenden Sie PushOutputLinePrefix und PopOutputLinePrefix, um das Präfix der Ausgabezeile vorübergehend zu ändern und es später wieder zu ändern.

Protokolldateien

Das Debuggermodul unterstützt das Öffnen einer Protokolldatei, um eine Debugsitzung aufzuzeichnen. Höchstens eine Protokolldatei kann gleichzeitig geöffnet werden. Die an die Ausgaberückrufe gesendete Ausgabe wird ebenfalls an diese Protokolldatei gesendet (es sei denn, sie wird als nicht protokolliert gekennzeichnet).

Um eine Protokolldatei zu öffnen, verwenden Sie OpenLogFile2 (oder OpenLogFile). Die Methode GetLogFile2 (oder GetLogFile) gibt die aktuell geöffnete Protokolldatei zurück. Verwenden Sie CloseLogFile, um die Protokolldatei zu schließen.

Die SetLogMask-Methode kann verwendet werden, um die an die Protokolldatei gesendete Ausgabe zu filtern, und GetLogMask gibt den aktuellen Protokolldateifilter zurück.

Eingabeaufforderung

In einer interaktiven Debugsitzung kann eine Eingabeaufforderung verwendet werden, um dem Benutzer mitzuteilen, dass der Debugger auf benutzereingaben wartet. Die Eingabeaufforderung wird mit den Methoden OutputPrompt und OutputPromptVaList an die Ausgaberückrufe gesendet. Der Inhalt der Standardeingabeaufforderung wird von GetPromptText zurückgegeben.