Compartir a través de


Filtros de eventos

Los filtros de eventos proporcionan filtrado de eventos simple; influyen en cómo continúa el motor del depurador después de que se produzca un evento en un destino. Cuando se produce un evento, el motor determina si ese evento coincide con un filtro de eventos. Si es así, el estado de interrupción del filtro de eventos influye en si el depurador se dividirá en el destino. Si el evento es un evento de excepción, el estado de control determina si la excepción se debe considerar controlada o no en el destino.

Nota Si se requiere un filtrado de eventos más sofisticado, se pueden usar devoluciones de llamada de eventos.

Los filtros de eventos se dividen en tres categorías.

  1. Filtros de eventos específicos. Estos son los filtros de todos los eventos que no son de excepción. Consulte DEBUG_FILTER_XXX para obtener una lista de estos eventos.

  2. Filtros de excepción específicos. El primer filtro de excepción específico es el filtro de excepción predeterminado. El resto son filtros para las excepciones para las que el motor tiene filtros integrados. Consulte Excepciones específicas para obtener una lista de los filtros de excepción específicos.

  3. Filtros arbitrarios de excepciones. Se trata de filtros para eventos de excepción que se han agregado manualmente.

Los filtros de las categorías 1 y 2 se conocen colectivamente como filtros específicos y los filtros de las categorías 2 y 3 se conocen colectivamente como filtros de excepción. GetNumberEventFilters devuelve el número de filtros de cada categoría.

Un evento coincide con un filtro de eventos específico si el tipo del evento es el mismo que el tipo del filtro. Algunos filtros de eventos tienen un parámetro adicional que restringe aún más los eventos que coinciden.

Un evento de excepción coincide con un filtro de excepción si el código de excepción del evento de excepción es el mismo que el código de excepción para el filtro de excepciones. Si no hay ningún filtro de excepción con el mismo código de excepción que el evento de excepción, el filtro de excepción predeterminado controlará el evento de excepción.

Comandos y parámetros

Los filtros de eventos pueden tener un comando del depurador asociado a ellos. El motor ejecuta este comando cuando se produce un evento que coincide con el filtro. GetEventFilterCommand y SetEventFilterCommand se pueden usar para obtener y establecer este comando. En el caso de los filtros de excepción, este comando se ejecuta en la primera oportunidad de la excepción. Se puede ejecutar un comando de segunda oportunidad independiente en el evento de excepción de segunda oportunidad. Para obtener y establecer el comando de segunda oportunidad, use GetExceptionFilterSecondCommand y SetExceptionSecondChanceCommand.

GetSpecificFilterParameters y GetExceptionFilterParameters devuelven los parámetros de filtros de eventos y filtros de excepción específicos. El estado de interrupción y el estado de control de los filtros de eventos se pueden establecer mediante SetSpecificFilterParameters y SetExceptionFilterParameters.

SetExceptionFilterParameters también se puede usar para agregar y quitar filtros arbitrarios de excepciones.

GetEventFilterText devuelve una breve descripción de filtros específicos.

Algunos filtros específicos toman argumentos que restringen los eventos que coincide el filtro. GetSpecificFilterArgument y SetSpecificFilterArgument obtendrán y establecerán argumentos para esos filtros específicos que admiten argumentos. Si un filtro específico no tiene ningún argumento, no hay ninguna restricción en qué eventos coincide. En la tabla siguiente se enumeran los filtros de eventos que toman argumentos y cómo restringen los eventos que coinciden con ellos:

Evento Criterios de coincidencia

Crear proceso

El nombre del proceso creado debe coincidir con el argumento.1.

Salir del proceso

El nombre del proceso terminado debe coincidir con el argumento.1.

Carga del módulo

El nombre del módulo cargado debe coincidir con el argumento.1.

Descargar módulo

La dirección base del módulo descargado debe ser la misma que el argumento.2.

Salida de destino

La salida de depuración del destino debe coincidir con el argumento.3.

Nota  

  1. El argumento usa la sintaxis de caracteres comodín de cadena y se compara con el nombre de la imagen (ignorando la ruta de acceso) cuando se produce el evento. Si el nombre del módulo o proceso no está disponible, se considera una coincidencia.

  2. El argumento es una expresión que evalúa el motor cuando se establece el argumento.

  3. El argumento usa la sintaxis de caracteres comodín de cadena y se compara con la salida de depuración del destino. Si no se conoce la salida, se considera una coincidencia.

Índice y código de excepción

Cada filtro de eventos tiene un índice. El índice es un número entre cero y uno menor que el número total de filtros (ambos incluidos). El intervalo de índices de cada categoría de filtros se puede encontrar en los valores SpecificEvents, SpecificExceptions y ArbitraryExceptionsdevueltos por GetNumberEventFilters, como se describe en la tabla siguiente:

Filtros de eventos Índice del primer filtro Número de filtros

Filtros de eventos específicos

0

SpecificEvents

filtros de excepción específicos

SpecificEvents

SpecificExceptions

filtros arbitrarios de excepciones

SpecificEvents + SpecificExceptions

ArbitraryExceptions

Los índices de los filtros de eventos específicos se encuentran en la primera tabla ubicada en el tema DEBUG_FILTER_XXX. El índice del filtro de excepción predeterminado (el primer filtro de excepción específico) es SpecificEvents. Cuando se quita un filtro de excepción arbitrario, los índices de los otros filtros de excepción arbitrarios pueden cambiar.

Normalmente, los filtros de excepción se especifican mediante el código de excepción. Sin embargo, algunos métodos requieren el índice de la excepción. Para buscar el índice de un filtro de excepción para una excepción determinada, use GetExceptionFilterParameters para iterar todos los filtros de excepción hasta que encuentre el que tiene el mismo código de excepción que la excepción. Los códigos de excepción de los filtros de excepción específicos se pueden encontrar en el tema Excepciones específicas.

Errores del sistema

Cuando se produce un error del sistema, el motor se dividirá en el depurador o imprimirá el error en el flujo de salida, si el error se produce en o por debajo de los niveles especificados. GetSystemErrorControl devuelve estos niveles y se pueden cambiar mediante SetSystemErrorControl.