Filtros de evento
Os filtros de evento fornecem filtragem de eventos simples; influenciam como o mecanismo do depurador prossegue depois que um evento ocorre em um destino. Quando ocorre um evento, o mecanismo determina se esse evento corresponde a um filtro de evento. Se isso acontecer, a quebra status para o filtro de evento influenciará se o depurador entrará no destino. Se o evento for um evento de exceção, o status de tratamento determinará se a exceção deve ser considerada tratada ou não no destino.
Nota Se a filtragem de eventos mais sofisticada for necessária, os retornos de chamada de evento poderão ser usados.
Os filtros de evento são divididos em três categorias.
Filtros de evento específicos. Esses são os filtros para todos os eventos de não exceção. Consulte DEBUG_FILTER_XXX para obter uma lista desses eventos.
Filtros de exceção específicos. O primeiro filtro de exceção específico é o filtro de exceção padrão. O restante são filtros para as exceções para as quais o mecanismo tem filtros internos. Consulte Exceções específicas para obter uma lista dos filtros de exceção específicos.
Filtros de exceção arbitrários. Estes são filtros para eventos de exceção que foram adicionados manualmente.
Os filtros nas categorias 1 e 2 são coletivamente conhecidos como filtros específicos e os filtros nas categorias 2 e 3 são coletivamente conhecidos como filtros de exceção. O número de filtros em cada categoria é retornado por GetNumberEventFilters.
Um evento corresponderá a um filtro de evento específico se o tipo do evento for o mesmo que o tipo do filtro. Alguns filtros de evento têm um parâmetro adicional que restringe ainda mais os eventos correspondentes.
Um evento de exceção corresponderá a um filtro de exceção se o código de exceção do evento de exceção for o mesmo que o código de exceção do filtro de exceção. Se não houver nenhum filtro de exceção com o mesmo código de exceção que o evento de exceção, o evento de exceção será tratado pelo filtro de exceção padrão.
Comandos e parâmetros
Os filtros de evento podem ter um comando de depurador associado a eles. Esse comando é executado pelo mecanismo quando ocorre um evento correspondente ao filtro. GetEventFilterCommand e SetEventFilterCommand podem ser usados para obter e definir esse comando. Para filtros de exceção, esse comando é executado na primeira chance da exceção. Um comando de segunda chance separado pode ser executado no evento de exceção de segunda chance. Para obter e definir o comando de segunda chance, use GetExceptionFilterSecondCommand e SetExceptionSecondChanceCommand.
Os parâmetros para filtros de evento específicos e filtros de exceção são retornados por GetSpecificFilterParameters e GetExceptionFilterParameters. A status de interrupção e a manipulação status para filtros de evento podem ser definidas usando SetSpecificFilterParameters e SetExceptionFilterParameters.
SetExceptionFilterParameters também pode ser usado para adicionar e remover filtros de exceção arbitrários.
Uma breve descrição de filtros específicos é retornada por GetEventFilterText.
Alguns filtros específicos recebem argumentos que restringem quais eventos o filtro corresponde. GetSpecificFilterArgument e SetSpecificFilterArgument obterão e definirão argumentos para esses filtros específicos que dão suporte a argumentos. Se um filtro específico não tiver nenhum argumento, não haverá nenhuma restrição sobre quais eventos ele corresponde. A tabela a seguir lista os filtros de evento que recebem argumentos e como eles restringem os eventos que correspondem a eles:
Evento | Critérios de correspondência |
---|---|
Criar Processo |
O nome do processo criado deve corresponder ao argumento.1 |
Sair do processo |
O nome do processo encerrado deve corresponder ao argumento.1 |
Carregar Módulo |
O nome do módulo carregado deve corresponder ao argumento.1 |
Módulo Descarregue |
O endereço base do módulo descarregado deve ser o mesmo que o argumento.2 |
Saída de destino |
A saída de depuração do destino deve corresponder ao argumento.3 |
Observação
O argumento usa a sintaxe curinga da cadeia de caracteres e é comparado com o nome da imagem (ignorando o caminho) quando o evento ocorre. Se o nome do módulo ou processo não estiver disponível, ele será considerado uma correspondência.
O argumento é uma expressão que é avaliada pelo mecanismo quando o argumento é definido.
O argumento usa a sintaxe curinga de cadeia de caracteres e é comparado com a saída de depuração do destino. Se a saída não for conhecida, ela será considerada uma correspondência.
Código de índice e exceção
Cada filtro de evento tem um índice. O índice é um número entre zero e um menor que o número total de filtros (inclusive). O intervalo de índice para cada categoria de filtros pode ser encontrado nos valores SpecificEvents, SpecificExceptions e ArbitraryExceptions retornados por GetNumberEventFilters, conforme descrito na tabela a seguir:
Filtros de evento | Índice do primeiro filtro | Número de filtros |
---|---|---|
Filtros de evento específicos |
0 |
SpecificEvents |
filtros de exceção específicos |
SpecificEvents |
SpecificExceptions |
filtros de exceção arbitrários |
SpecificEvents + SpecificExceptions |
ArbitraryExceptions |
Os índices dos filtros de evento específicos são encontrados na primeira tabela localizada no tópico DEBUG_FILTER_XXX. O índice do filtro de exceção padrão (o primeiro filtro de exceção específico) é SpecificEvents. Quando um filtro de exceção arbitrário é removido, os índices dos outros filtros de exceção arbitrários podem ser alterados.
Os filtros de exceção geralmente são especificados pelo código de exceção. No entanto, alguns métodos exigem o índice da exceção. Para localizar o índice de um filtro de exceção para uma determinada exceção, use GetExceptionFilterParameters para iterar em todos os filtros de exceção até encontrar aquele com o mesmo código de exceção que a exceção. Os códigos de exceção para os filtros de exceção específicos podem ser encontrados no tópico Exceções Específicas.
Erros do sistema
Quando ocorrer um erro do sistema, o mecanismo será dividido no depurador ou imprimirá o erro no fluxo de saída, se o erro ocorrer nos níveis especificados ou abaixo dele. Esses níveis são retornados por GetSystemErrorControl e podem ser alterados usando SetSystemErrorControl.