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
, Debugger
o 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.
Argomenti correlati