Partilhar via


Usando MFTrace

MFTrace é uma ferramenta para gerar logs de rastreamento para aplicativos do Microsoft Media Foundation.

MFTrace usa a biblioteca Detours para interceptar chamadas da API Media Foundation e gerar logs de rastreamento. O MFTrace também pode gravar rastreamentos de qualquer componente que use o Rastreamento de Eventos para Windows (ETW) ou o pré-processador de rastreamento de software (WPP) para gerar rastreamentos. Os logs de rastreamento podem ser gerados iniciando um novo processo do MFTrace ou anexando o MFTrace a um processo existente.

Utilização

mftrace [-aProcesso][-cFicheiroDeConfiguração][-dc][-es][-kPalavras-chave][-lNível][-oFicheiroDeSaída][-v][-?] [{COMANDO|ETL_FILE}]

Argumentos de linha de comando Descrição
-aID do Processo ou Nome do Processo
Anexe a um processo em execução.
-carquivo de configuração
Leia as definições do arquivo de configuração especificado. Consulte o ficheiro de configuração do MFTrace.
-DC
Desative o rastreamento de processos filhos. Por padrão, o rastreamento está habilitado para processos filho.
-es
Habilite símbolos públicos.
-kPalavras-chave
Uma lista de palavras-chave separadas por vírgula. Veja MFTrace Palavras-chave.
-lNível
O nível de rastreamento.
  • 0: Nenhum
  • 1: Crítica
  • 2: Erro
  • 3: Advertência
  • 4: Informativo
  • 5: Verbose
  • 16: Depurar
-oArquivo de Saída
Escreva a saída de rastreamento no arquivo especificado. Por padrão, a saída vai para stdout.
Se um arquivo de saída for especificado, a extensão de nome de arquivo deve ser uma das seguintes:
  • .etl: Arquivo de log de rastreamento de eventos (ETL).
  • .log ou .txt: Arquivo de texto.
-v
Habilite o modo detalhado.
-?
Exibir informações de uso.
COMANDO
Argumentos de linha de comando para criar um novo processo.
ETL_FILE
O nome de um arquivo ETL existente. Se esse argumento for fornecido, o arquivo ETL será convertido em saída de texto.

 

Variáveis de ambiente

TRACE_FORMAT_SEARCH_PATH

Para rastrear componentes que usam o WPP (pré-processador de rastreamento de software) do Windows, defina essa variável de ambiente para especificar o caminho para os arquivos TMF (formato de mensagem de rastreamento) para o componente.

_NT_SYMBOL_PATH

Se a pesquisa de símbolos estiver habilitada (-es), defina essa variável de ambiente para especificar o caminho do símbolo.

Exemplos

Crie um novo processo e rastreie esse processo:

mftrace.exe wmplayer.exe Wildlife.wmv

Anexe MFTrace a um processo existente:

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

Enviar saída de rastreamento para um arquivo de texto:

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

Rastrear eventos ETW ou WPP:

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

Observação

O primeiro exemplo gera um arquivo de texto. O segundo exemplo gera um arquivo ETL.

 

Converta um arquivo ETL em um arquivo de texto:

mftrace.exe -o trace.txt trace.etl

Comentários

Por padrão, o MFTrace gera apenas rastreamentos de Detours. Para gerar rastreamentos ETW ou WPP, você deve fornecer um arquivo de configuração. O arquivo de configuração fornece os nomes dos provedores de rastreamento. Para obter mais informações, consulte MFTrace Configuration File.

MFTrace pode enviar saída para os seguintes destinos:

  • stdout (o padrão).
  • Um arquivo de texto.
  • Um arquivo ETL binário.

Se você estiver registrando rastreamentos ETW/WPP, um arquivo ETL é a opção mais eficiente, porque os dados de rastreamento são salvos como blobs binários. Após a conclusão da sessão de rastreamento, você pode usar MFTrace para converter o arquivo ETL em um arquivo de texto.

Observação

Para o rastreamento de desvios, a saída de texto é tão eficiente quanto um arquivo ETL. Portanto, se registares apenas rastreamentos de Detours (sem rastreamentos ETW/WPP), a saída de texto é recomendada.

 

Para rastreamento de desvios, você deve anexar MFTrace a um processo em execução (-a) ou usar MFTrace para criar um novo processo. Para rastreamentos ETW/WPP, o MFTrace escuta qualquer provedor de eventos listado no arquivo de configuração.

Você pode filtrar os resultados do rastreamento especificando palavras-chave de rastreamento, por meio da opção de linha de comando -k ou no arquivo de configuração. O uso mais típico, no entanto, é registrar todos os rastreamentos e, em seguida, usar um script ou grep para procurar padrões de cadeia de caracteres específicos.

Interpretando os resultados do rastreamento

Você pode usar o MFTrace para responder a perguntas sobre o que acontece dentro do seu aplicativo ou componente do Media Foundation. A tabela a seguir lista algumas perguntas típicas. A segunda coluna fornece a cadeia de pesquisa que pode ajudar a responder à pergunta.

Pergunta Cadeias de caracteres de pesquisa
Ocorreu um erro? "0xc00d"
A topologia foi resolvida corretamente? "CTopologyHelpers::Trace"
A Sessão de Imprensa começou? "MESessionStarted"
Que ficheiro foi reproduzido? "CMFSourceResolverDetours"
Quais são os tipos de mídia para os fluxos de origem? "Novo fluxo", "MENewStream", "CMFMediaSourceDetours::TracePD"
Os fluxos-fonte geraram amostras? "CMFMediaStreamDetours::HandleEvent", "MEMediaSample"
A reprodução alcançou o final dos dados? "MEEndOfStream", "MEEndOfPresentation"
O formato mudou? "MEStreamFormatChanged" (fontes de mídia), "Novo formato", "MESessionStreamSinkFormatChanged" (coletores de mídia)
Que objetos foram criados? "COle32ExportDetours::CoCreateInstance"
As Transformações do Media Foundation (MFTs) no pipeline processaram algum dado? "CMFTransformDetours::ProcessOutput", "CMFTransformDetours::ProcessInput"
Que estados foram definidos nas MFT? "CMFTransformDetours::ProcessMessage"
Solicitou uma MFT dados de entrada? "MF_E_TRANSFORM_NEED_MORE_INPUT" (MFT síncrona), "METransformNeedInput" (MFT assíncrona).
Uma MFT assíncrona produziu dados de saída? "ProcessOutputs disponíveis"
Um coletor de mídia solicitou amostras? "MEStreamSinkRequestSample"
Um receptor de mídia recebeu amostras? "CMFStreamSinkDetours::P rocessSample"
DirectShow: Quais amostras foram processadas? "amostra", "CMemInputPinDetours"
DirectShow: Qual gráfico de filtro foi usado? "CGraphHelpers::Trace"
Houve vários processos? "CreateProcess" Nota: Procure também o identificador de processo, que aparece no início de cada linha de rastreamento.

 

MFTrace