Depurar funções de saída

[O recurso associado a esta página, DirectShow, é um recurso herdado. Foi substituído por MediaPlayer, IMFMediaEnginee Audio/Video Capture in Media Foundation. Esses recursos foram otimizados para Windows 10 e Windows 11. A Microsoft recomenda vivamente que o novo código utilize MediaPlayer, IMFMediaEngine e Captura de Áudio/Vídeo no Media Foundation em vez de DirectShow, quando possível. A Microsoft sugere que o código existente que usa as APIs herdadas seja reescrito para usar as novas APIs, se possível.]

O DirectShow Base Classes fornecer várias macros para exibir informações de depuração.

Função Descrição
DbgCheckModuleLevel Verifica se o registro em log está habilitado para os tipos e nível de mensagem fornecidos.
DbgDumpObjectRegister Exibe informações sobre objetos ativos.
DbgInitialise Inicializa a biblioteca de depuração.
DbgLog Envia uma cadeia de caracteres para o local de saída de depuração, se o registro em log estiver habilitado para o tipo e nível especificados.
DbgOutString Envia uma cadeia de caracteres para o local de saída de depuração.
DbgSetModuleLevel Define o nível de log para um ou mais tipos de mensagem.
DbgTerminate Limpa a biblioteca de depuração.
DisplayType Envia informações sobre um tipo de mídia para o local de saída de depuração.
DumpGraph Envia informações sobre um gráfico de filtro para o local de saída de depuração.
GuidNames Matriz global que contém cadeias de caracteres que representam os GUIDs definidos em Uuids.h.
NOME Gera uma cadeia de caracteres somente de depuração.
NOTA Envia uma cadeia de caracteres para o local de saída de depuração.
LEMBRAR Gera um lembrete em tempo de compilação.

 

chaves do Registro

A função de saída de depuração no DirectShow usa um conjunto de chaves do Registro. A localização destas chaves de registo depende da versão do Windows.

Antes do Windows Vista, as chaves de depuração estão localizadas no seguinte caminho:

HKEY_LOCAL_MACHINE\SOFTWARE\Depurar

No Windows Vista ou posterior, eles estão localizados no seguinte caminho:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DirectShow\Debug

Para filtros de terceiros, o local depende de qual versão do DirectShow Base Classes foi usada para criar o filtro. A versão incluída no SDK do Windows para Windows Vista usa o caminho mais recente. As versões anteriores usavam o caminho mais antigo.

Nos comentários a seguir, o rótulo <DebugRoot> é usado para indicar esses dois caminhos. Substitua o caminho correto, dependendo da versão do Windows ou da versão das classes base.

Debug Logging

O DirectShow define vários tipos de mensagem, mostrados na tabela a seguir.

Valor Descrição
LOG_ERROR Notificação de erro.
LOG_LOCKING Bloqueio e desbloqueio de secções críticas.
LOG_MEMORY Alocação de memória e criação e destruição de objetos.
LOG_TIMING Medições de tempo e desempenho.
LOG_TRACE Rastreamento geral de chamadas.
CUSTOM1 através CUSTOM5 Disponível para mensagens de depuração personalizadas

 

Cada uma das funções de log de depuração do DirectShow especifica um tipo de mensagem e um nível de log. A mensagem de depuração é exibida somente quando o nível de depuração atual para esse tipo de mensagem é igual ou maior do que o nível especificado na função de log. Caso contrário, a mensagem será ignorada.

Por exemplo, o código a seguir gera a cadeia de caracteres "Esta é uma mensagem de depuração" se o nível de LOG_TRACE for 3 ou superior:

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

Cada módulo pode definir seu próprio nível de depuração para cada tipo de mensagem. (Um módulo é uma DLL ou executável que pode ser carregado usando a função LoadLibrary.) Os níveis de depuração de um módulo aparecem no registro sob a seguinte chave:

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

onde <Tipo de Mensagem> é o tipo de mensagem menos o "LOG_" inicial; por exemplo, BLOQUEIO para mensagens LOG_LOCKING. Quando um módulo é carregado, a biblioteca de depuração localiza os níveis de log do módulo no registro. Se as chaves do Registro não existirem, a biblioteca de depuração as cria.

Um módulo também pode definir seus próprios níveis em tempo de execução, usando a funçãoDbgSetModuleLevel. Para enviar uma mensagem para a saída de depuração, chame a macroDbgLog. O exemplo a seguir cria uma mensagem de nível 3 do tipo LOG_TRACE:

Você também pode especificar níveis de log globais, com a seguinte chave do Registro:

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

A biblioteca de depuração usa o nível que for maior, o nível global ou o nível do módulo.

Local de saída de depuração

O local de saída de depuração é determinado por outra chave do Registro:

HKEY_LOCAL_MACHINE\<DebugRoot>\<Modile Name>\LogToFile

Se o valor dessa chave for Console, a saída vai para a janela do console. Se o valor for Deb, Debug, Debuggerou uma cadeia de caracteres vazia, a saída vai para a janela do depurador. Caso contrário, a saída é gravada em um arquivo especificado pela chave do Registro.

Antes de um executável usar a biblioteca de depuração do DirectShow, ele deve chamar a funçãoDbgInitialise. Depois, ele deve chamar o DbgTerminate função. As DLLs não precisam chamar essas funções, porque o ponto de entrada da DLL (definido na biblioteca de classes base) as chama automaticamente.

Utilitários de depuração