Eseguire il debug di funzioni di output

[La funzionalità associata a questa pagina, DirectShow, è una funzionalità legacy. È stata sostituita da MediaPlayer, FMMediaEngine e Audio/Video Capture in Media Foundation. Queste funzionalità sono state ottimizzate per Windows 10 e Windows 11. Microsoft consiglia vivamente che il nuovo codice usi MediaPlayer, FMMediaEngine e Audio/Video Capture in Media Foundation anziché DirectShow, quando possibile. Microsoft suggerisce che il codice esistente che usa le API legacy venga riscritto per usare le nuove API, se possibile.

Le classi di base DirectShow forniscono diverse macro per la visualizzazione delle informazioni di debug.

Funzione Descrizione
DbgCheckModuleLevel Verifica se la registrazione è abilitata per i tipi di messaggi e il livello specificati.
DbgDumpObjectRegister Visualizza informazioni sugli oggetti attivi.
DbgInitialise Inizializza la libreria di debug.
DbgLog Invia una stringa al percorso di output di debug, se la registrazione è abilitata per il tipo e il livello specificati.
DbgOutString Invia una stringa al percorso di output di debug.
DbgSetModuleLevel Imposta il livello di registrazione per uno o più tipi di messaggio.
DbgTerminate Pulisce la libreria di debug.
DisplayType Invia informazioni su un tipo di supporto al percorso di output di debug.
DumpGraph Invia informazioni su un grafico di filtro al percorso di output di debug.
GuidNames Matrice globale contenente stringhe che rappresentano i GUID definiti in Uuids.h.
NOME Genera una stringa di sola debug.
NOTA Invia una stringa al percorso di output di debug.
RICORDARE Genera un promemoria in fase di compilazione.

 

Chiavi del Registro di sistema

La funzione di output di debug in DirectShow usa un set di chiavi del Registro di sistema. La posizione di queste chiavi del Registro di sistema dipende dalla versione di Windows.

Prima di Windows Vista, le chiavi di debug si trovano nel percorso seguente:

HKEY_LOCAL_MACHINE\SOFTWARE\Debug

In Windows Vista o versioni successive si trovano nel percorso seguente:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Directshow\Debug

Per i filtri di terze parti, la posizione dipende da quale versione delle classi di base DirectShow è stata usata per compilare il filtro. La versione inclusa in Windows SDK per Windows Vista usa il percorso più recente. Le versioni precedenti hanno usato il percorso precedente.

Nelle osservazioni che seguono, l'etichetta <DebugRoot> viene usata per indicare questi due percorsi. Sostituire il percorso corretto, a seconda della versione di Windows o della versione delle classi di base.

Registrazione debug

DirectShow definisce diversi tipi di messaggio, illustrati nella tabella seguente.

Valore Descrizione
LOG_ERROR Notifica degli errori.
LOG_LOCKING Blocco e sblocco delle sezioni critiche.
LOG_MEMORY Allocazione della memoria e creazione e distruzione degli oggetti.
LOG_TIMING Misurazioni di tempi e prestazioni.
LOG_TRACE Traccia delle chiamate generali.
CUSTOM1 tramite CUSTOM5 Disponibile per i messaggi di debug personalizzati

 

Ognuna delle funzioni di registrazione di debug DirectShow specifica un tipo di messaggio e un livello di log. Il messaggio di debug viene visualizzato solo quando il livello di debug corrente per tale tipo di messaggio è uguale o maggiore del livello specificato nella funzione di registrazione. In caso contrario, il messaggio viene ignorato.

Ad esempio, il codice seguente restituisce la stringa "Questo è un messaggio di debug" se il livello di LOG_TRACE è 3 o superiore:

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

Ogni modulo può impostare il proprio livello di debug per ogni tipo di messaggio. Un modulo è una DLL o un eseguibile che può essere caricato usando la funzione LoadLibrary . I livelli di debug di un modulo vengono visualizzati nel Registro di sistema sotto la chiave seguente:

HKEY_LOCAL_MACHINE\<DebugRoot>\<ModuleName>\<MessageType>

dove <Tipo> di messaggio è il tipo di messaggio meno l'iniziale "LOG_",ad esempio LOCKING per i messaggi di LOG_LOCKING. Quando viene caricato un modulo, la libreria di debug individua i livelli di registrazione del modulo nel Registro di sistema. Se le chiavi del Registro di sistema non esistono, la libreria di debug li crea.

Un modulo può anche impostare i propri livelli in fase di esecuzione usando la funzione DbgSetModuleLevel . Per inviare un messaggio all'output di debug, chiamare la macro DbgLog . Nell'esempio seguente viene creato un messaggio di livello 3 di tipo LOG_TRACE:

È anche possibile specificare i livelli di registrazione globali, con la chiave del Registro di sistema seguente:

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

La libreria di debug usa qualsiasi livello maggiore, il livello globale o il livello del modulo.

Percorso di output di debug

Il percorso di output di debug è determinato da un'altra chiave del Registro di sistema:

HKEY_LOCAL_MACHINE\<DebugRoot>\<Modile Name>\LogToFile

Se il valore di questa chiave è Console, l'output passa alla finestra della console. Se il valore è Deb, Debug, Debuggero una stringa vuota, l'output passa alla finestra del debugger. In caso contrario, l'output viene scritto in un file specificato dalla chiave del Registro di sistema.

Prima che un eseguibile usi la libreria di debug DirectShow, deve chiamare la funzione DbgInitialise . Successivamente, deve chiamare la funzione DbgTerminate . Le DLL non devono chiamare queste funzioni, perché il punto di ingresso della DLL (definito nella libreria di classi di base) li chiama automaticamente.

Utilità di debug