Debuggen von Ausgabefunktionen
[Das dieser Seite zugeordnete Feature DirectShow ist ein Legacyfeature. Es wurde durch MediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation ersetzt. Diese Features wurden für Windows 10 und Windows 11 optimiert. Microsoft empfiehlt dringend, dass neuer Code nach Möglichkeit MediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation anstelle von DirectShow verwendet. Microsoft schlägt vor, vorhandenen Code, der die Legacy-APIs verwendet, um nach Möglichkeit die neuen APIs zu verwenden.]
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 -ebene 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. |
NAMEN | Generiert eine reine Debugzeichenfolge. |
HINWEIS | Sendet eine Zeichenfolge an den Debugausgabespeicherort. |
ERINNERN | Generiert eine Erinnerung zur Kompilierzeit. |
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 Vista befinden sich die Debugschlüssel unter dem folgenden Pfad:
HKEY_LOCAL_MACHINE\SOFTWARE\Debuggen
In Windows Vista oder höher befinden sie sich unter dem folgenden Pfad:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Directshow\Debuggen
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 Anmerkungen 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, die in der folgenden Tabelle dargestellt sind.
Wert | BESCHREIBUNG |
---|---|
LOG_ERROR | Fehlerbenachrichtigung. |
LOG_LOCKING | Sperren und Entsperren kritischer Abschnitte. |
LOG_MEMORY | Speicherzuordnung sowie Objekterstellung und -zerstörung. |
LOG_TIMING | Timing- und Leistungsmessungen. |
LOG_TRACE | Allgemeine Anrufablaufverfolgung. |
CUSTOM1 bis CUSTOM5 | Verfügbar für benutzerdefinierte Debugmeldungen |
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 ist als die in der Protokollierungsfunktion angegebene Ebene. 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 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>
wobei< Nachrichtentyp> der Nachrichtentyp abzüglich des anfänglichen "LOG_" ist, z. B. LOCKING 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 mit 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 Protokollierungsebenen mit dem folgenden Registrierungsschlüssel angeben:
\HKEY_LOCAL_MACHINE\<DebugRoot>\GLOBAL\<Message Type>
Die Debugbibliothek verwendet die größere Ebene, die globale Ebene oder die Modulebene.
Debugausgabespeicherort
Der Speicherort der Debugausgabe wird durch einen anderen Registrierungsschlüssel bestimmt:
HKEY_LOCAL_MACHINE\<DebugRoot>\<Modile Name>\LogToFile
Wenn der Wert dieses Schlüssels ist, geht Console
die Ausgabe an das Konsolenfenster. Wenn der Wert , Debug
, Debugger
oder eine leere Zeichenfolge istDeb
, wird die Ausgabe an das Debuggerfenster übergeben. Andernfalls wird die Ausgabe in eine Vom Registrierungsschlüssel angegebene Datei geschrieben.
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 der DLL-Einstiegspunkt (definiert in der Basisklassenbibliothek) sie automatisch aufruft.
Zugehörige Themen