Debugausgabefunktionen
[Das dieser Seite zugeordnete Feature DirectShow-ist ein Legacyfeature. Es wurde von MediaPlayer, IMFMediaEngineund Audio/Video Capture in Media Foundationersetzt. Diese Features wurden für Windows 10 und Windows 11 optimiert. Microsoft empfiehlt dringend, dass neuer Code MediaPlayer-, IMFMediaEngine und Audio-/Videoaufnahme in Media Foundation anstelle von DirectShow-verwendet, wenn möglich. Microsoft schlägt vor, dass vorhandener Code, der die Legacy-APIs verwendet, um die neuen APIs zu verwenden, falls möglich umgeschrieben werden.]
Die DirectShow-Basisklassen mehrere Makros zum Anzeigen von Debuginformationen bereitstellen.
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 die Protokollierungsebene 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. |
NAME- | Generiert eine schreibgeschützte Zeichenfolge. |
Sendet eine Zeichenfolge an den Debugausgabespeicherort. | |
ERINNERN | Generiert zur Kompilierungszeit eine Erinnerung. |
Registrierungsschlüssel
Die Debugausgabefunktion in DirectShow verwendet eine Reihe von Registrierungsschlüsseln. Der Speicherort dieser Registrierungsschlüssel hängt von der Windows-Version ab.
Vor Windows Vistabefinden sich die Debugschlüssel unter dem folgenden Pfad:
HKEY_LOCAL_MACHINE\SOFTWARE\Debug-
In Windows Vista oder höher befinden sie sich unter dem folgenden Pfad:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DirectShow\Debug-
Bei Drittanbieterfiltern hängt der Speicherort davon ab, welche Version der DirectShow-Basisklassen zum Erstellen des Filters verwendet wurde. Die im Windows SDK für Windows Vista enthaltene Version verwendet den neueren Pfad. In früheren Versionen wurde der ältere Pfad verwendet.
In den folgenden Hinweisen wird die Bezeichnung <DebugRoot-> verwendet, um diese beiden Pfade anzugeben. Ersetzen Sie abhängig von der Version von Windows oder der Version der Basisklassen den richtigen Pfad.
Debugprotokollierung
DirectShow definiert mehrere Nachrichtentypen, die in der folgenden Tabelle dargestellt sind.
Wert | Beschreibung |
---|---|
LOG_ERROR | Fehlerbenachrichtigung. |
LOG_LOCKING | Sperren und Entsperren kritischer Abschnitte. |
LOG_MEMORY | Speicherzuweisung und Objekterstellung und -zerstörung. |
LOG_TIMING | Timing- und Leistungsmessungen. |
LOG_TRACE | Allgemeine Anrufablaufverfolgung. |
CUSTOM1 bis CUSTOM5 | Verfügbar für benutzerdefinierte Debugnachrichten |
Jede der DirectShow-Debugprotokollierungsfunktionen gibt einen Nachrichtentyp und eine Protokollebene 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 "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 mithilfe 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->
wobei <Nachrichtentyp-> der Nachrichtentyp minus der anfängliche "LOG_" ist; beispielsweise SPERREN für LOG_LOCKING Nachrichten. Wenn ein Modul geladen wird, findet die Debugbibliothek die Protokollierungsebenen des Moduls in der Registrierung. Wenn die Registrierungsschlüssel nicht vorhanden sind, erstellt die Debugbibliothek sie.
Ein Modul kann auch seine eigenen Ebenen zur Laufzeit festlegen, indem die DbgSetModuleLevel--Funktion verwendet wird. Rufen Sie zum Senden einer Nachricht an die Debugausgabe das DbgLog Makros auf. Im folgenden Beispiel wird eine Nachricht der Ebene 3 vom Typ LOG_TRACE erstellt:
Sie können auch globale Protokollierungsebenen mit dem folgenden Registrierungsschlüssel angeben:
\HKEY_LOCAL_MACHINE\<DebugRoot>\GLOBAL\<Message Type>
Die Debugbibliothek verwendet je nachdem, welche Ebene größer ist, die globale Ebene oder die Modulebene.
Debugausgabespeicherort
Der Debugausgabespeicherort wird durch einen anderen Registrierungsschlüssel bestimmt:
HKEY_LOCAL_MACHINE\<DebugRoot->\<Modile-Name>\LogToFile-
Wenn der Wert dieses Schlüssels Console
ist, wechselt die Ausgabe in das Konsolenfenster. Wenn der Wert Deb
, Debug
, Debugger
oder eine leere Zeichenfolge ist, wechselt die Ausgabe in das Debuggerfenster. Andernfalls wird die Ausgabe in eine datei geschrieben, die vom Registrierungsschlüssel angegeben wird.
Bevor eine ausführbare Datei die DirectShow-Debugbibliothek verwendet, muss sie die DbgInitialise-Funktion aufrufen. Danach muss die funktion DbgTerminate aufgerufen werden. DLLs müssen diese Funktionen nicht aufrufen, da der DLL-Einstiegspunkt (definiert in der Basisklassenbibliothek) sie automatisch aufruft.
Verwandte Themen