Filtri eventi

I filtri eventi forniscono un filtro di eventi semplice; influiscono sul modo in cui il motore del debugger procede dopo che si verifica un evento in una destinazione. Quando si verifica un evento, il motore determina se tale evento corrisponde a un filtro evento. In caso contrario, lo stato di interruzione per il filtro eventi influenza se il debugger si interromperà nella destinazione. Se l'evento è un evento di eccezione, lo stato di gestione determina se l'eccezione deve essere considerata gestita o non gestita nella destinazione.

Nota Se è necessario un filtro eventi più sofisticato, è possibile usare callback eventi.

I filtri eventi sono suddivisi in tre categorie.

  1. Filtri eventi specifici. Questi sono i filtri per tutti gli eventi non eccezioni. Per un elenco di questi eventi, vedere DEBUG_FILTER_XXX .

  2. Filtri di eccezione specifici. Il primo filtro di eccezione specifico è il filtro di eccezione predefinito. Il resto sono filtri per tali eccezioni per cui il motore ha filtri predefiniti. Per un elenco dei filtri di eccezione specifici, vedere Eccezioni specifiche .

  3. Filtri di eccezione arbitrari. Questi sono filtri per gli eventi di eccezione aggiunti manualmente.

I filtri nelle categorie 1 e 2 sono noti collettivamente come filtri specifici e i filtri nelle categorie 2 e 3 sono noti collettivamente come filtri di eccezione. Il numero di filtri in ogni categoria viene restituito da GetNumberEventFilters.

Un evento corrisponde a un filtro evento specifico se il tipo dell'evento corrisponde al tipo del filtro. Alcuni filtri eventi hanno un parametro aggiuntivo che limita ulteriormente gli eventi corrispondenti.

Un evento di eccezione corrisponde a un filtro di eccezione se il codice di eccezione per l'evento di eccezione corrisponde al codice di eccezione per il filtro eccezioni. Se non esiste alcun filtro eccezione con lo stesso codice eccezione dell'evento di eccezione, l'evento di eccezione verrà gestito dal filtro di eccezione predefinito.

Comandi e parametri

I filtri eventi possono avere un comando debugger associato. Questo comando viene eseguito dal motore quando si verifica un evento corrispondente al filtro. È possibile usare GetEventFilterCommand e SetEventFilterCommand per ottenere e impostare questo comando. Per i filtri delle eccezioni, questo comando viene eseguito per la prima probabilità dell'eccezione. È possibile eseguire un comando di seconda probabilità separato all'evento di eccezione second-chance. Per ottenere e impostare il comando second-chance, usare GetExceptionFilterSecondCommand e SetExceptionSecondChanceCommand.

I parametri per filtri eventi e filtri di eccezione specifici vengono restituiti da GetSpecificFilterParameters e GetExceptionFilterParameters. Lo stato di interruzione e lo stato di gestione per i filtri eventi possono essere impostati usando SetSpecificFilterParameters e SetExceptionFilterParameters.

È anche possibile usare SetExceptionFilterParameters per aggiungere e rimuovere filtri di eccezione arbitrari.

Viene restituita una breve descrizione di filtri specifici da GetEventFilterText.

Alcuni filtri specifici accettano argomenti che limitano gli eventi corrispondenti al filtro. GetSpecificFilterArgument e SetSpecificFilterArgument otterranno e impostano gli argomenti per tali filtri specifici che supportano gli argomenti. Se un filtro specifico non ha alcun argomento, non esiste alcuna restrizione per gli eventi corrispondenti. Nella tabella seguente sono elencati i filtri eventi che accettano argomenti e come limitano gli eventi corrispondenti:

Evento Criteri di corrispondenza

Crea processo

Il nome del processo creato deve corrispondere all'argomento.1

Esci processo

Il nome del processo chiuso deve corrispondere all'argomento.1

Modulo di caricamento

Il nome del modulo caricato deve corrispondere all'argomento.1

Scarica modulo

L'indirizzo di base del modulo scaricato deve essere uguale all'argomento.2

Output di destinazione

L'output di debug dalla destinazione deve corrispondere all'argomento.3

Nota  

  1. L'argomento usa la sintassi con caratteri jolly stringa e viene confrontata con il nome dell'immagine (ignorando il percorso) quando si verifica l'evento. Se il nome del modulo o del processo non è disponibile, viene considerata una corrispondenza.

  2. L'argomento è un'espressione valutata dal motore quando l'argomento è impostato.

  3. L'argomento usa la sintassi con caratteri jolly stringa e viene confrontata con l'output di debug dalla destinazione. Se l'output non è noto, viene considerata una corrispondenza.

Indice e codice eccezione

Ogni filtro evento ha un indice. L'indice è un numero compreso tra zero e uno minore del numero totale di filtri (inclusivo). L'intervallo di indici per ogni categoria di filtri è disponibile nei valori SpecificEvents, SpecificExceptions e ArbitraryExceptions restituiti da GetNumberEventFilters, come descritto nella tabella seguente:

Filtri eventi Indice del primo filtro Numero di filtri

Filtri eventi specifici

0

SpecificEvents

filtri di eccezione specifici

SpecificEvents

SpecificExceptions

filtri di eccezioni arbitrarie

SpecificEvents + SpecificExceptions

ArbitrarieExceptions

Gli indici per i filtri eventi specifici sono disponibili nella prima tabella situata nell'argomento DEBUG_FILTER_XXX. L'indice del filtro di eccezione predefinito (il primo filtro di eccezione specifico) è SpecificEvents. Quando viene rimosso un filtro di eccezione arbitrario, è possibile modificare gli indici degli altri filtri di eccezione arbitrari.

I filtri di eccezione vengono in genere specificati dal codice di eccezione. Tuttavia, alcuni metodi richiedono l'indice dell'eccezione. Per trovare l'indice di un filtro di eccezione per una determinata eccezione, usare GetExceptionFilterParameters per eseguire l'iterazione di tutti i filtri di eccezione fino a trovare quello con lo stesso codice di eccezione dell'eccezione. I codici di eccezione per i filtri di eccezione specifici sono disponibili nell'argomento Eccezioni specifiche.

Errori di sistema

Quando si verifica un errore di sistema, il motore si interrompe nel debugger o stampa l'errore nel flusso di output, se l'errore si verifica a o al di sotto dei livelli specificati. Questi livelli vengono restituiti da GetSystemErrorControl e possono essere modificati usando SetSystemErrorControl.