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 Consoledie Ausgabe an das Konsolenfenster. Wenn der Wert , Debug, Debuggeroder 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.

Debuggen von Hilfsprogrammen