이벤트 필터

이벤트 필터는 간단한 이벤트 필터링을 제공합니다. 대상에서 이벤트가 발생한 후 디버거 엔진이 진행되는 방식에 영향을 줍니다. 이벤트가 발생하면 엔진은 해당 이벤트가 이벤트 필터와 일치하는지 여부를 결정합니다. 이 경우 이벤트 필터에 대한 중단 상태 디버거가 대상에 침입할지 여부에 영향을 줍니다. 이벤트가 예외 이벤트인 경우 처리 상태 대상에서 예외를 처리하거나 처리하지 않는 것으로 간주해야 하는지 여부를 결정합니다.

참고 보다 정교한 이벤트 필터링이 필요한 경우 이벤트 콜백을 사용할 수 있습니다.

이벤트 필터는 세 가지 범주로 나뉩니다.

  1. 특정 이벤트 필터. 예외가 아닌 모든 이벤트에 대한 필터입니다. 이러한 이벤트 목록은 DEBUG_FILTER_XXX 참조하세요.

  2. 특정 예외 필터. 첫 번째 특정 예외 필터는 기본 예외 필터입니다. 나머지는 엔진에 기본 제공 필터가 있는 예외에 대한 필터입니다. 특정 예외 필터 목록은 특정 예외를 참조하세요.

  3. 임의 예외 필터. 이러한 필터는 수동으로 추가된 예외 이벤트에 대한 필터입니다.

범주 1과 2의 필터는 집합적으로 특정 필터라고 하며 범주 2와 3의 필터를 예외 필터라고 합니다. 각 범주의 필터 수는 GetNumberEventFilters에서 반환됩니다.

이벤트의 형식이 필터의 형식과 동일한 경우 이벤트는 특정 이벤트 필터와 일치합니다. 일부 이벤트 필터에는 일치하는 이벤트를 추가로 제한하는 추가 매개 변수가 있습니다.

예외 이벤트에 대한 예외 코드가 예외 필터의 예외 코드와 동일한 경우 예외 이벤트는 예외 필터와 일치합니다. 예외 이벤트와 동일한 예외 코드를 가진 예외 필터가 없는 경우 예외 이벤트는 기본 예외 필터에 의해 처리됩니다.

명령 및 매개 변수

이벤트 필터에는 디버거 명령이 연결되어 있을 수 있습니다. 이 명령은 필터와 일치하는 이벤트가 발생할 때 엔진에서 실행됩니다. GetEventFilterCommandSetEventFilterCommand 를 사용하여 이 명령을 가져와서 설정할 수 있습니다. 예외 필터의 경우 이 명령은 예외의 첫 번째 기회에 실행됩니다. 두 번째 기회 예외 이벤트에 대해 별도의 두 번째 기회 명령을 실행할 수 있습니다. 두 번째 기회 명령을 가져와서 설정하려면 GetExceptionFilterSecondCommandSetExceptionSecondChanceCommand를 사용합니다.

특정 이벤트 필터 및 예외 필터에 대한 매개 변수는 GetSpecificFilterParametersGetExceptionFilterParameters에서 반환됩니다. SetSpecificFilterParameters 및 SetExceptionFilterParameters를 사용하여 이벤트 필터에 대한 중단 상태 및 처리 상태 설정할 수 있습니다.

SetExceptionFilterParameters를 사용하여 임의 예외 필터를 추가하고 제거할 수도 있습니다.

특정 필터에 대한 간단한 설명은 GetEventFilterText에서 반환됩니다.

일부 특정 필터는 필터가 일치하는 이벤트를 제한하는 인수를 사용합니다. GetSpecificFilterArgumentSetSpecificFilterArgument 는 인수를 지원하는 특정 필터에 대한 인수를 가져와서 설정합니다. 특정 필터에 인수가 없으면 일치하는 이벤트에 대한 제한이 없습니다. 다음 표에서는 인수를 사용하는 이벤트 필터와 인수와 일치하는 이벤트를 제한하는 방법을 나열합니다.

이벤트 일치 조건

프로세스 만들기

만든 프로세스의 이름은 인수와 일치해야 합니다.1

프로세스 종료

종료된 프로세스의 이름은 인수와 일치해야 합니다.1

모듈 로드

로드된 모듈의 이름은 인수와 일치해야 합니다.1

모듈 언로드

언로드된 모듈의 기본 주소는 인수와 동일해야 합니다.2

대상 출력

대상의 디버그 출력은 인수와 일치해야 합니다.3

참고  

  1. 인수는 문자열 와일드카드 구문을 사용하며 이벤트가 발생할 때 이미지 이름(경로 무시)과 비교됩니다. 모듈 또는 프로세스의 이름을 사용할 수 없는 경우 일치하는 것으로 간주됩니다.

  2. 인수는 인수가 설정될 때 엔진에서 계산하는 식입니다.

  3. 인수는 문자열 와일드카드 구문을 사용하며 대상의 디버그 출력과 비교됩니다. 출력을 알 수 없는 경우 일치 항목으로 간주됩니다.

인덱스 및 예외 코드

각 이벤트 필터에는 인덱스가 있습니다. 인덱스는 필터의 총 수(포함)보다 0에서 1 사이의 숫자입니다. 필터의 각 범주에 대한 인덱스 범위는 다음 표에 설명된 대로 GetNumberEventFilters에서 반환된 SpecificEvents, SpecificExceptionsArbitraryExceptions 값에서 찾을 수 있습니다.

이벤트 필터 첫 번째 필터의 인덱스 필터 수

특정 이벤트 필터

0

SpecificEvents

특정 예외 필터

SpecificEvents

SpecificExceptions

임의 예외 필터

SpecificEvents + SpecificExceptions

ArbitraryExceptions

특정 이벤트 필터에 대한 인덱스는 DEBUG_FILTER_XXX 항목에 있는 첫 번째 테이블에서 찾을 수 있습니다. 기본 예외 필터(첫 번째 특정 예외 필터)의 인덱 스는 SpecificEvents입니다. 임의 예외 필터가 제거되면 다른 임의 예외 필터의 인덱스가 변경될 수 있습니다.

예외 필터는 일반적으로 예외 코드로 지정됩니다. 그러나 일부 메서드에는 예외의 인덱스가 필요합니다. 지정된 예외에 대한 예외 필터의 인덱스를 찾으려면 예외와 동일한 예외 코드가 있는 필터를 찾을 때까지 GetExceptionFilterParameters 를 사용하여 모든 예외 필터를 반복합니다. 특정 예외 필터에 대한 예외 코드는 특정 예외 항목에서 찾을 수 있습니다.

시스템 오류

시스템 오류가 발생하면 엔진이 디버거에 침입하거나 오류가 지정된 수준 이하에서 발생하는 경우 출력 스트림에 오류를 출력합니다. 이러한 수준은 GetSystemErrorControl에서 반환되며 SetSystemErrorControl을 사용하여 변경할 수 있습니다.