Partager via


Utiliser MFTrace

MFTrace est un outil permettant de générer des journaux de suivi pour les applications Microsoft Media Foundation.

MFTrace utilise la bibliothèque Detours pour s'accrocher aux appels API de Media Foundation et générer des journaux de suivi. MFTrace peut également enregistrer des traces à partir de n'importe quel composant qui utilise Event Tracing for Windows (ETW) ou le préprocesseur de traces logicielles (WPP) pour générer des traces. Les journaux de traces peuvent être générés en démarrant un nouveau processus à partir de MFTrace, ou en attachant MFTrace à un processus existant.

Utilisation

mftrace [-a Process][-c ConfigurationFile][-dc][-es][-k KeyWords][-l Level][-o OutputFile][-v][-?] [{COMMAND|ETL_FILE}]

Arguments de ligne de commande Description
-aID ou nom du processus
Attacher à un processus en cours d’exécution.
-cFichier de configuration
Lire les paramètres du fichier de configuration spécifié. Voir Fichier de configuration de MFTrace.
-dc
Désactiver le traçage pour les processus enfants. Par défaut, le traçage est activé pour les processus enfants.
-es
Activer les symboles publics.
-kMots clés
Une liste de mots-clés séparés par des virgules. Voir les mots-clés de MFTrace.
-lNiveau
Niveau de trace.
  • 0 : Aucune
  • 1 : Critique
  • 2 : Erreur
  • 3 : Avertissement
  • 4 : Informatif
  • 5 : détaillé
  • 16 : Débogage
-oFichier de sortie
Écrire la sortie de la trace dans le fichier spécifié. Par défaut, la sortie se fait sur stdout.
Si un fichier de sortie est spécifié, l'extension du nom de fichier doit être l'une des suivantes :
  • .etl : Fichier de journal de suivi des événements (ETL).
  • .log ou .txt : Fichier texte.
-v
Activez le mode détaillé.
-?
Affichez des informations sur l’utilisation.
COMMAND
Arguments de la ligne de commande pour créer un nouveau processus.
ETL_FILE
Le nom d'un fichier ETL existant. Si cet argument est fourni, le fichier ETL est converti en sortie texte.

 

Variables d'environnement

TRACE_FORMAT_SEARCH_PATH

Pour suivre les composants qui utilisent le préprocesseur de suivi logiciel Windows (WPP), définissez cette variable d'environnement pour spécifier le chemin d'accès aux fichiers de format de message de suivi (TMF) pour le composant.

_NT_SYMBOL_PATH

Si la recherche de symboles est activée (-es), définissez cette variable d'environnement pour spécifier le chemin d'accès aux symboles.

Exemples

Créez un nouveau processus et tracez ce processus :

mftrace.exe wmplayer.exe Wildlife.wmv

Attachez MFTrace à un processus existant :

mftrace.exe -a wmplayer.exe
mftrace.exe -a 9132

Envoyer la sortie de la trace dans un fichier texte :

mftrace.exe -a wmplayer.exe -o trace.txt

Tracer les événements ETW ou WPP :

mftrace.exe -c config.xml -o trace.txt
mftrace.exe -c config.xml -o trace.etl

Remarque

Le premier exemple génère un fichier texte. Le deuxième exemple génère un fichier ETL.

 

Convertissez un fichier ETL en fichier texte :

mftrace.exe -o trace.txt trace.etl

Notes

Par défaut, MFTrace ne génère que des traces Detours. Pour générer des traces ETW ou WPP, vous devez fournir un fichier de configuration. Le fichier de configuration indique les noms des fournisseurs de traces. Pour plus d'informations, voir Fichier de configuration de MFTrace.

MFTrace peut envoyer la sortie vers les destinations suivantes :

  • stdout (par défaut).
  • Un fichier texte.
  • Un fichier ETL binaire.

Si vous journalisez des traces ETW/WPP, un fichier ETL est l'option la plus efficace, car les données de trace sont enregistrées sous forme de blobs binaires. Une fois la session de traçage terminée, vous pouvez utiliser MFTrace pour convertir le fichier ETL en fichier texte.

Remarque

Pour le traçage de Detours, la sortie texte est tout aussi efficace qu'un fichier ETL. Par conséquent, si vous ne journalisez que les traces Detours (sans traces ETW/WPP), la sortie texte est recommandée.

 

Pour les traces Detours, vous devez attacher MFTrace à un processus en cours d'exécution (-a) ou utiliser MFTrace pour créer un nouveau processus. Pour les traces ETW/WPP, MFTrace écoute tous les fournisseurs d'événements listés dans le fichier de configuration.

Vous pouvez filtrer les résultats des traces en spécifiant des mots-clés de trace, soit par l'option de ligne de commande -k, soit dans le fichier de configuration. L'utilisation la plus courante, cependant, est de journaliser toutes les traces, puis d'utiliser un script ou grep pour rechercher des chaînes de caractères particulières.

Interprétation des résultats des traces

Vous pouvez utiliser MFTrace pour répondre à des questions sur ce qui se passe à l'intérieur de votre application ou composant Media Foundation. Le tableau suivant répertorie quelques questions typiques. La deuxième colonne indique la chaîne de recherche qui peut aider à répondre à la question.

Question Chaînes de recherche
Une erreur s'est-elle produite ? "0xc00d"
La topologie a-t-elle été résolue correctement ? "CTopologyHelpers::Trace"
La session média a-t-elle démarré ? "MESessionStarted"
Quel fichier a été lu ? "CMFSourceResolverDetours"
Quels sont les types de médias pour les flux source ? "New stream", "MENewStream", "CMFMediaSourceDetours::TracePD"
Les flux source ont-ils généré des échantillons ? "CMFMediaStreamDetours::HandleEvent", "MEMediaSample"
La lecture a-t-elle atteint la fin des données ? "MEEndOfStream", "MEEndOfPresentation"
Le format a-t-il changé ? "MEStreamFormatChanged" (sources médiatiques), "New format", "MESessionStreamSinkFormatChanged" (récepteurs de médias)
Quels objets ont été créés ? "COle32ExportDetours::CoCreateInstance"
Les Media Foundation Transforms (MFT) du pipeline ont-ils traité des données ? "CMFTransformDetours::ProcessOutput", "CMFTransformDetours::ProcessInput"
Quels états ont été définis sur les MFT ? "CMFTransformDetours::ProcessMessage"
Une FFCP a-t-elle demandé des données en entrée ? "MF_E_TRANSFORM_NEED_MORE_INPUT" (MFT synchrone), "METransformNeedInput" (asynchronous MFT).
Une MFT asynchrone a-t-elle produit des données de sortie ? "ProcessOutputs available"
Un récepteur a-t-il demandé des échantillons ? "MEStreamSinkRequestSample"
Un récepteur a-t-il reçu des échantillons ? "CMFStreamSinkDetours::ProcessSample"
DirectShow : Quels échantillons ont été traités ? "sample", "CMemInputPinDetours"
DirectShow : Quel graphique de filtrage a été utilisé ? "CGraphHelpers::Trace"
Y a-t-il eu plusieurs processus ? "CreateProcess" Remarque : recherchez également l'identifiant du processus, qui apparaît au début de chaque ligne de trace.

 

MFTrace