Debuggen von Ausgabefunktionen

Die DirectShow-Basisklassen stellen mehrere Makros zum Anzeigen von Debuginformationen bereit.

Funktion Beschreibung
DbgCheckModuleLevel Überprüft, ob die Protokollierung für die angegebenen Nachrichtentypen und -ebenen aktiviert ist.
DbgDumpObjectRegister Zeigt Informationen zu aktiven Objekten an.
DbgInitialise Initialisiert die Debugbibliothek.
DbgLog Sendet eine Zeichenfolge an den Debugausgabespeicherort, wenn die Protokollierung für den angegebenen Typ und die angegebene Ebene aktiviert ist.
DbgOutString Sendet eine Zeichenfolge an den Debugausgabespeicherort.
DbgSetModuleLevel Legt den Protokolliergrad für einen oder mehrere Nachrichtentypen fest.
DbgTerminate Bereinigt die Debugbibliothek.
DisplayType Sendet Informationen zu einem Medientyp an den Debugausgabespeicherort.
DumpGraph Sendet Informationen zu einem Filterdiagramm an den Debugausgabespeicherort.
GuidNames Globales Array, das Zeichenfolgen enthält, die die in Uuids.h definierten GUIDs darstellen.
NAMEN Generiert eine Nur-Debug-Zeichenfolge.
HINWEIS Sendet eine Zeichenfolge an den Debugausgabespeicherort.
ERINNERN Generiert zur Kompilierzeit eine Erinnerung.

Registrierungsschlüssel

Die Debugausgabefunktion in DirectShow verwendet einen Satz von Registrierungsschlüsseln. Der Speicherort dieser Registrierungsschlüssel hängt von der Version der Windows ab.

Vor Windows Vista befinden sich die Debugschlüssel unter dem folgenden Pfad:

HKEY _ _ \ \ SOFTWAREdebuggen AUF DEM LOKALEN COMPUTER

In Windows Vista oder höher befinden sie sich unter dem folgenden Pfad:

HKEY _ LOKALE _ COMPUTERSOFTWARE \ \ Microsoft \ DirectShow \ Debug

Bei Filtern von Drittanbietern hängt der Speicherort davon ab, welche Version der DirectShow-Basisklassen zum Erstellen des Filters verwendet wurde. Die version, die im Windows SDK für Windows Vista enthalten ist, verwendet den neueren Pfad. Frühere Versionen verwendeten den älteren Pfad.

In den folgenden Hinweisen wird die Bezeichnung < DebugRoot > verwendet, um diese beiden Pfade anzugeben. Ersetzen Sie den richtigen Pfad abhängig von der Version von Windows oder der Version der Basisklassen.

Debugprotokollierung

DirectShow definiert mehrere Nachrichtentypen, wie in der folgenden Tabelle gezeigt.

Wert Beschreibung
_PROTOKOLLFEHLER Fehlerbenachrichtigung.
_PROTOKOLLSPERREN Sperren und Entsperren kritischer Abschnitte.
_PROTOKOLLSPEICHER Speicherbelegung und Objekterstellung und -zerstörung.
_PROTOKOLLIERUNGSZEIT Zeit- und Leistungsmessungen.
_PROTOKOLLABLAUFVERFOLGUNG Allgemeine Aufrufablaufverfolgung.
CUSTOM1 bis CUSTOM5 Verfügbar für benutzerdefinierte Debugmeldungen

Jede der DirectShow-Debugprotokollierungsfunktionen gibt einen Nachrichtentyp und einen Protokolliergrad an. Die Debugmeldung wird nur angezeigt, wenn die aktuelle Debugebene für diesen Nachrichtentyp gleich oder größer als die in der Protokollierungsfunktion angegebene Ebene ist. Andernfalls wird die Nachricht ignoriert.

Der folgende Code gibt beispielsweise die Zeichenfolge "This is a debug message" (Dies ist eine Debugmeldung) aus, wenn die LOG _ TRACE-Ebene 3 oder höher ist:

DbgLog((LOG_TRACE, 3, TEXT("This is a debug message")));

Jedes Modul kann für jeden Nachrichtentyp eine eigene Debugebene festlegen. (Ein Modul ist eine DLL oder ausführbare Datei, die mit der LoadLibrary-Funktion geladen werden kann.) Die Debugebenen eines Moduls werden in der Registrierung unter dem folgenden Schlüssel angezeigt:

HKEY _ LOCAL _ MACHINE \ < DebugRoot > \ < ModuleName > \ < MessageType >

dabei ist der Nachrichtentyp minus dem anfänglichen "LOG", _ z. B. LOCKING für LOG _ LOCKING-Nachrichten. Wenn ein Modul geladen wird, findet die Debugbibliothek die Protokolliergrade des Moduls in der Registrierung. Wenn die Registrierungsschlüssel nicht vorhanden sind, werden sie von der Debugbibliothek erstellt.

Ein Modul kann mithilfe der DbgSetModuleLevel-Funktion auch eigene Ebenen zur Laufzeit festlegen. Um eine Nachricht an die Debugausgabe zu senden, rufen Sie das DbgLog-Makro auf. Im folgenden Beispiel wird eine Meldung der Ebene 3 vom Typ LOG _ TRACE erstellt:

Sie können auch globale Protokolliergrade mit dem folgenden Registrierungsschlüssel angeben:

\HKEY_LOCAL_MACHINE\<DebugRoot>\GLOBAL\<Message Type>

Die Debugbibliothek verwendet die höhere Ebene, die globale Ebene oder die Modulebene.

Debugausgabespeicherort

Der Speicherort der Debugausgabe wird durch einen anderen Registrierungsschlüssel bestimmt:

HKEY _ LOCAL _ MACHINE \ < DebugRoot > \ \ LogToFile

Wenn der Wert dieses Schlüssels Console ist, wird die Ausgabe an das Konsolenfenster ausgegeben. Wenn der Wert Deb , , oder eine leere Zeichenfolge Debug Debugger ist, wird die Ausgabe an das Debuggerfenster ausgegeben. Andernfalls wird die Ausgabe in eine Datei geschrieben, die durch den Registrierungsschlüssel angegeben wird.

Bevor eine ausführbare Datei die DirectShow-Debugbibliothek verwendet, muss sie die DbgInitialise-Funktion aufrufen. Anschließend muss die DbgTerminate-Funktion aufgerufen werden. DLLs müssen diese Funktionen nicht aufrufen, da sie vom DLL-Einstiegspunkt (definiert in der Basisklassenbibliothek) automatisch aufgerufen werden.

Debuggen von Hilfsprogrammen