Condividi tramite


Eseguire il debug di funzioni di output

[La funzionalità associata a questa pagina, DirectShow, è una funzionalità legacy. È stata sostituita da MediaPlayer, IMFMediaEnginee Acquisizione audio/video in Media Foundation. Queste funzionalità sono state ottimizzate per Windows 10 e Windows 11. Microsoft consiglia vivamente di usare un nuovo codice MediaPlayer, IMFMediaEngine e Acquisizione audio/video 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.

La DirectShow Base Classes fornisce diverse macro per la visualizzazione delle informazioni di debug.

Funzione Descrizione
DbgCheckModuleLevel Controlla se la registrazione è abilitata per i tipi e il livello di messaggio 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 che contiene stringhe che rappresentano i GUID definiti in Uuids.h.
NAME Genera una stringa di sola debug.
NOTE Invia una stringa al percorso di output di debug.
REMIND 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. Il percorso 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, il percorso dipende dalla versione del directshow classi base è stata usata per compilare il filtro. La versione inclusa in Windows SDK per Windows Vista usa il percorso più recente. Le versioni precedenti usavano il percorso precedente.

Nelle osservazioni seguenti, 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.

di registrazione di debug

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

Valore Descrizione
LOG_ERROR Notifica di errore.
LOG_LOCKING Blocco e sblocco di sezioni critiche.
LOG_MEMORY Allocazione della memoria e creazione e distruzione di oggetti.
LOG_TIMING Misurazioni di temporizzazione e prestazioni.
LOG_TRACE Traccia delle chiamate generale.
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 il 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 il "LOG_" iniziale; ad esempio LOCKING per i messaggi di LOG_LOCKING. Quando viene caricato un modulo, la libreria di debug trova i livelli di registrazione del modulo nel Registro di sistema. Se le chiavi del Registro di sistema non esistono, la libreria di debug le crea.

Un modulo può anche impostare i propri livelli in fase di esecuzione usando la funzionedbgSetModuleLevel. Per inviare un messaggio all'output di debug, chiamare la macrodbgLog. 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 del debug è determinato da un'altra chiave del Registro di sistema:

HKEY_LOCAL_MACHINE\<DebugRoot>\<Nome modile>\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 funzionedbgInitialise. Successivamente, deve chiamare la funzionedbgTerminate. 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