Compartir a través de


Funciones de salida de depuración

[La característica asociada a esta página, DirectShow, es una característica heredada. Se ha reemplazado por MediaPlayer, IMFMediaEnginey captura de audio y vídeo en Media Foundation. Esas características se han optimizado para Windows 10 y Windows 11. Microsoft recomienda encarecidamente que el nuevo código use MediaPlayer, IMFMediaEngine y captura de audio y vídeo en Media Foundation en lugar de DirectShow, siempre que sea posible. Microsoft sugiere que el código existente que usa las API heredadas se reescriba para usar las nuevas API si es posible.

Las clases base de DirectShow proporcionan varias macros para mostrar información de depuración.

Función Descripción
DbgCheckModuleLevel Comprueba si el registro está habilitado para los tipos de mensaje y el nivel especificados.
dbgDumpObjectRegister Muestra información sobre los objetos activos.
DbgInitialise Inicializa la biblioteca de depuración.
dbgLog Envía una cadena a la ubicación de salida de depuración, si el registro está habilitado para el tipo y el nivel especificados.
DbgOutString Envía una cadena a la ubicación de salida de depuración.
DbgSetModuleLevel Establece el nivel de registro para uno o varios tipos de mensajes.
DbgTerminate Limpia la biblioteca de depuración.
displayType Envía información sobre un tipo de medio a la ubicación de salida de depuración.
DumpGraph Envía información sobre un gráfico de filtro a la ubicación de salida de depuración.
GuidNames de Matriz global que contiene cadenas que representan los GUID definidos en Uuids.h.
NAME Genera una cadena de solo depuración.
NOTA Envía una cadena a la ubicación de salida de depuración.
RECORDAR Genera un recordatorio en tiempo de compilación.

 

de claves del Registro de

La función de salida de depuración de DirectShow usa un conjunto de claves del Registro. La ubicación de estas claves del Registro depende de la versión de Windows.

Antes de Windows Vista, las claves de depuración se encuentran en la ruta de acceso siguiente:

HKEY_LOCAL_MACHINE\software\depuración

En Windows Vista o posterior, se encuentran en la siguiente ruta de acceso:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DirectShow\Depurar

En el caso de los filtros de terceros, la ubicación depende de la versión del Clases base de DirectShow se usó para compilar el filtro. La versión incluida en Windows SDK para Windows Vista usa la ruta de acceso más reciente. Las versiones anteriores usaron la ruta de acceso anterior.

En los comentarios siguientes, la etiqueta <DebugRoot> se usa para indicar estas dos rutas de acceso. Sustituya la ruta de acceso correcta, según la versión de Windows o la versión de las clases base.

de registro de depuración de

DirectShow define varios tipos de mensajes, que se muestran en la tabla siguiente.

Valor Descripción
LOG_ERROR Notificación de error.
LOG_LOCKING Bloqueo y desbloqueo de secciones críticas.
LOG_MEMORY Asignación de memoria y creación y destrucción de objetos.
LOG_TIMING Medidas de tiempo y rendimiento.
LOG_TRACE Seguimiento general de llamadas.
CUSTOM1 a través de CUSTOM5 Disponible para mensajes de depuración personalizados

 

Cada una de las funciones de registro de depuración de DirectShow especifica un tipo de mensaje y un nivel de registro. El mensaje de depuración solo se muestra cuando el nivel de depuración actual para ese tipo de mensaje es igual o mayor que el nivel especificado en la función de registro. De lo contrario, se omite el mensaje.

Por ejemplo, el código siguiente genera la cadena "Este es un mensaje de depuración" si el nivel de LOG_TRACE es 3 o superior:

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

Cada módulo puede establecer su propio nivel de depuración para cada tipo de mensaje. (Un módulo es un archivo DLL o ejecutable que se puede cargar mediante la función loadLibrary de). Los niveles de depuración de un módulo aparecen en el Registro con la siguiente clave:

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

donde <tipo de mensaje> es el tipo de mensaje menos el "LOG_" inicial; por ejemplo, LOCKING para LOG_LOCKING mensajes. Cuando se carga un módulo, la biblioteca de depuración busca los niveles de registro del módulo en el Registro. Si las claves del Registro no existen, la biblioteca de depuración las crea.

Un módulo también puede establecer sus propios niveles en tiempo de ejecución mediante la funcióndbgSetModuleLevel. Para enviar un mensaje a la salida de depuración, llame a la macrodbgLog. En el ejemplo siguiente se crea un mensaje de nivel 3 de tipo LOG_TRACE:

También puede especificar niveles de registro globales, con la siguiente clave del Registro:

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

La biblioteca de depuración usa el nivel que sea mayor, el nivel global o el nivel de módulo.

de ubicación de salida de depuración de

La ubicación de salida de depuración viene determinada por otra clave del Registro:

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

Si el valor de esta clave es Console, la salida va a la ventana de la consola. Si el valor es Deb, Debug, Debuggero una cadena vacía, la salida va a la ventana del depurador. De lo contrario, la salida se escribe en un archivo especificado por la clave del Registro.

Antes de que un archivo ejecutable use la biblioteca de depuración de DirectShow, debe llamar a la funcióndbgInitialise. Después, debe llamar a la función dbgTerminate . Los archivos DLL no necesitan llamar a estas funciones, ya que el punto de entrada DLL (definido en la biblioteca de clases base) los llama automáticamente.

utilidades de depuración