중단점 플래그 및 매개 변수 제어

중단점에 대한 기본 정보를 확인하는 데 사용할 수 있는 여러 가지 메서드가 있습니다.

  • GetId 는 중단점 ID를 반환합니다.

  • GetType 은 중단점 유형(소프트웨어 또는 프로세서)과 중단점이 설정된 유효 프로세서의 형식을 반환합니다.

  • GetAdder 는 중단점을 추가한 클라이언트를 반환합니다.

  • GetOffset 은 중단점의 주소를 반환합니다.

  • GetOffsetExpression 은 중단점의 위치를 지정하는 식 문자열을 반환합니다.

해당 위치 및 중단점 유형 외에도 중단점에는 동작을 제어하는 여러 매개 변수가 있습니다.

중단점 매개 변수는 다양한 특정 메서드를 통해 제어할 수 있습니다. 또한 대부분의 매개 변수는 GetParameters를 사용하여 함께 쿼리할 수 있습니다.

중단점 플래그

중단점 플래그는 중단점 매개 변수의 한 종류입니다.

중단점 플래그는 GetFlags를 사용하여 쿼리할 수 있습니다. AddFlags, RemoveFlags 또는 SetFlags를 사용하여 변경할 수 있습니다.

중단점 플래그는 비트 필드를 형성합니다. 이 비트 필드에서 사용할 수 있는 가능한 플래그와 그 의미는 다음과 같습니다.

DEBUG_BREAKPOINT_ENABLED
이 플래그가 설정되면 중단점이 활성화되고 정상적인 효과가 적용됩니다. 이 플래그를 설정하지 않으면 중단점이 비활성화 되고 아무런 영향도 미치지 않습니다. 중단점을 일시적으로 비활성화하려는 경우 이 플래그를 제거할 수 있습니다. 그러면 이 중단점을 다시 사용하도록 설정하려는 경우 이 플래그를 다시 쉽게 추가할 수 있습니다.

DEBUG_BREAKPOINT_ADDER_ONLY
이 플래그가 설정되면 중단점은 프라이빗 중단점입니다. 이 중단점은 중단점을 추가한 클라이언트에만 표시됩니다. 이 경우 다른 클라이언트는 중단점에 대해 엔진을 쿼리할 수 없으며 엔진은 중단점에서 생성된 이벤트를 다른 클라이언트에 보내지 않습니다. 이 중단점과 관련된 모든 콜백(이벤트 및 출력)은 이 클라이언트로만 전송됩니다. GetAdder를 참조하세요.

DEBUG_BREAKPOINT_GO_ONLY
이 플래그가 설정되면 중단점은 대상이 무제한 실행 중인 경우에만 트리거됩니다. 엔진이 대상의 지침을 단계별로 실행하는 경우 트리거되지 않습니다.

DEBUG_BREAKPOINT_ONE_SHOT
이 플래그가 설정되면 중단점이 처음 트리거될 때 자동으로 자체적으로 제거됩니다.

DEBUG_BREAKPOINT_DEFERRED
이 플래그가 설정되면 중단점이 지연됩니다. 이 플래그는 심볼 식을 사용하여 중단점의 오프셋을 지정하고 엔진이 식을 평가할 수 없는 경우 엔진에 의해 설정됩니다. 모듈이 대상에 로드되거나 해제될 때마다 엔진은 식을 사용하여 위치가 지정된 모든 중단점에 대한 식을 다시 평가하려고 시도합니다. 평가할 수 없는 항목은 지연으로 플래그가 지정됩니다. 이 플래그는 클라이언트에서 수정할 수 없습니다.

기타 중단점 매개 변수

중단점 매개 변수에는 다음도 포함됩니다.

패스 수
중단점에 연결된 패스 수가 있는 경우 대상이 중단점을 지정된 횟수만큼 통과할 때까지 활성화되지 않습니다. 원래 설정된 패스 수는 GetPassCount를 사용하여 찾을 수 있습니다. 엔진이 활성화되기 전에 중단점을 전달할 남은 횟수는 GetCurrentPassCount를 사용하여 찾을 수 있습니다. SetPassCount를 사용하여 패스 수를 새 값으로 다시 설정할 수 있습니다.

스레드 일치
중단점에 연결된 스레드가 있는 경우 다른 스레드에서 발견되면 엔진에서 무시됩니다. 스레드는 GetMatchThreadId를 사용하여 찾을 수 있으며 SetMatchThreadId를 사용하여 변경할 수 있습니다.

명령
중단점에 연결된 명령이 있을 수 있습니다. 중단점이 활성화되면 명령이 실행됩니다. 이 명령은 GetCommand를 사용하여 찾을 수 있으며 SetCommand를 사용하여 변경할 수 있습니다.

크기
중단점이 프로세서 중단점인 경우 지정된 크기가 있어야 합니다. 그러면 액세스가 중단점을 활성화하는 메모리 블록의 크기가 결정됩니다. 블록의 시작은 중단점의 위치입니다. 크기는 GetDataParameters를 사용하여 찾을 수 있으며 SetDataParameters를 사용하여 변경할 수 있습니다.

액세스 유형
중단점이 프로세서 중단점인 경우 액세스 유형이 있어야 합니다. 그러면 중단점을 활성화할 액세스 유형이 결정됩니다. 예를 들어 대상이 중단점에서 읽거나, 쓰거나, 중단점에서 지정한 메모리를 실행하는 경우 중단점이 활성화될 수 있습니다. 액세스 유형은 GetDataParameters를 사용하여 찾을 수 있으며 SetDataParameters를 사용하여 변경할 수 있습니다.

프로세서 중단점에 대한 유효한 매개 변수

프로세서 중단점에 사용할 수 있는 액세스 유형은 다음과 같습니다.

Description

DEBUG_BREAK_READ

중단점은 CPU가 중단점의 메모리 블록에서 메모리를 읽을 때 트리거됩니다.

DEBUG_BREAK_WRITE

중단점은 CPU가 중단점의 메모리 블록에 메모리를 쓸 때 트리거됩니다.

DEBUG_BREAK_READ | DEBUG_BREAK_WRITE

중단점은 CPU가 중단점의 메모리 블록에서 메모리를 읽거나 쓸 때 트리거됩니다.

DEBUG_BREAK_EXECUTE

중단점은 CPU가 중단점의 메모리 블록에서 명령을 가져올 때 트리거됩니다.

DEBUG_BREAK_IO

중단점 메모리 블록의 I/O 포트에 액세스하면 중단점이 트리거됩니다. (Windows XP 및 Microsoft Windows Server 2003에만 해당, 커널 모드만, x86만 해당)

모든 액세스 유형 및 크기가 모든 프로세서에서 지원되는 것은 아닙니다. 지원되는 액세스 유형 및 크기는 다음과 같습니다.

x86
모든 액세스 유형이 지원됩니다. DEBUG_BREAK_READ DEBUG_BREAK_READ 처럼 작동 | DEBUG_BREAK_WRITE. 크기는 1, 2 또는 4여야 합니다. 중단점의 주소는 크기의 배수여야 합니다.

x64
모든 액세스 유형이 지원됩니다. DEBUG_BREAK_READ DEBUG_BREAK_READ 처럼 작동 | DEBUG_BREAK_WRITE. 크기는 1, 2, 4 또는 8이어야 합니다. 중단점의 주소는 크기의 배수여야 합니다.