Fonctions de sortie de débogage

[La fonctionnalité associée à cette page, DirectShow, est une fonctionnalité héritée. Il a été remplacé par MediaPlayer, IMFMediaEngine et Audio/Video Capture in Media Foundation. Ces fonctionnalités ont été optimisées pour Windows 10 et Windows 11. Microsoft recommande vivement que le nouveau code utilise MediaPlayer, IMFMediaEngine et Audio/Video Capture dans Media Foundation au lieu de DirectShow, si possible. Microsoft suggère que le code existant qui utilise les API héritées soit réécrit pour utiliser les nouvelles API si possible.]

Les classes de base DirectShow fournissent plusieurs macros pour afficher les informations de débogage.

Fonction Description
DbgCheckModuleLevel Vérifie si la journalisation est activée pour les types de messages et le niveau donnés.
DbgDumpObjectRegister Affiche des informations sur les objets actifs.
DbgInitialise Initialise la bibliothèque de débogage.
DbgLog Envoie une chaîne à l’emplacement de sortie de débogage, si la journalisation est activée pour le type et le niveau spécifiés.
DbgOutString Envoie une chaîne à l’emplacement de sortie de débogage.
DbgSetModuleLevel Définit le niveau de journalisation pour un ou plusieurs types de messages.
DbgTerminate Nettoie la bibliothèque de débogage.
DisplayType Envoie des informations sur un type de média à l’emplacement de sortie de débogage.
DumpGraph Envoie des informations sur un graphique de filtre à l’emplacement de sortie de débogage.
GuidNames Tableau global qui contient des chaînes représentant les GUID définis dans Uuids.h.
NOM Génère une chaîne de débogage uniquement.
NOTE Envoie une chaîne à l’emplacement de sortie de débogage.
RAPPELER Génère un rappel au moment de la compilation.

 

Clés de Registre

La fonction de sortie de débogage dans DirectShow utilise un ensemble de clés de Registre. L’emplacement de ces clés de Registre dépend de la version de Windows.

Avant Windows Vista, les clés de débogage se trouvent sous le chemin suivant :

HKEY_LOCAL_MACHINE\LOGICIEL\Debug

Dans Windows Vista ou version ultérieure, ils se trouvent sous le chemin suivant :

HKEY_LOCAL_MACHINE\LOGICIEL\Microsoft\Directshow\Debug

Pour les filtres tiers, l’emplacement dépend de la version des classes de base DirectShow qui a été utilisée pour générer le filtre. La version incluse dans le Kit de développement logiciel (SDK) Windows pour Windows Vista utilise le chemin d’accès le plus récent. Les versions précédentes utilisaient l’ancien chemin d’accès.

Dans les remarques qui suivent, l’étiquette <DebugRoot> est utilisée pour indiquer ces deux chemins. Remplacez le chemin d’accès correct, en fonction de la version de Windows ou de la version des classes de base.

Journalisation du débogage

DirectShow définit plusieurs types de messages, indiqués dans le tableau suivant.

Valeur Description
LOG_ERROR Notification d’erreur.
LOG_LOCKING Verrouillage et déverrouillage des sections critiques.
LOG_MEMORY Allocation de mémoire, création et destruction d’objets.
LOG_TIMING Mesures de minutage et de performances.
LOG_TRACE Suivi général des appels.
CUSTOM1 à CUSTOM5 Disponible pour les messages de débogage personnalisés

 

Chacune des fonctions de journalisation de débogage DirectShow spécifie un type de message et un niveau de journalisation. Le message de débogage s’affiche uniquement lorsque le niveau de débogage actuel pour ce type de message est supérieur ou égal au niveau spécifié dans la fonction de journalisation. Sinon, le message est ignoré.

Par exemple, le code suivant génère la chaîne « Ceci est un message de débogage » si le niveau LOG_TRACE est égal ou supérieur à 3 :

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

Chaque module peut définir son propre niveau de débogage pour chaque type de message. (Un module est une DLL ou un exécutable qui peut être chargé à l’aide de la fonction LoadLibrary .) Les niveaux de débogage d’un module apparaissent dans le Registre sous la clé suivante :

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

<Type de> message est le type de message moins le « LOG_ » initial ; par exemple, LOCKING pour les messages LOG_LOCKING. Lorsqu’un module est chargé, la bibliothèque de débogage recherche les niveaux de journalisation du module dans le Registre. Si les clés de Registre n’existent pas, la bibliothèque de débogage les crée.

Un module peut également définir ses propres niveaux au moment de l’exécution, à l’aide de la fonction DbgSetModuleLevel . Pour envoyer un message à la sortie de débogage, appelez la macro DbgLog . L’exemple suivant crée un message de niveau 3 de type LOG_TRACE :

Vous pouvez également spécifier des niveaux de journalisation globaux, avec la clé de Registre suivante :

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

La bibliothèque de débogage utilise le niveau le plus élevé, le niveau global ou le niveau du module.

Emplacement de sortie de débogage

L’emplacement de sortie de débogage est déterminé par une autre clé de Registre :

HKEY_LOCAL_MACHINE\<DebugRoot>\<Nom de modile>\LogToFile

Si la valeur de cette clé est Console, la sortie accède à la fenêtre de console. Si la valeur est Deb, Debug, Debuggerou une chaîne vide, la sortie accède à la fenêtre du débogueur. Sinon, la sortie est écrite dans un fichier spécifié par la clé de Registre.

Avant qu’un exécutable utilise la bibliothèque de débogage DirectShow, il doit appeler la fonction DbgInitialise . Ensuite, elle doit appeler la fonction DbgTerminate . Les DLL n’ont pas besoin d’appeler ces fonctions, car le point d’entrée dll (défini dans la bibliothèque de classes de base) les appelle automatiquement.

Utilitaires de débogage