다음을 통해 공유


디버거에 침입

사용자 모드 및 커널 모드 코드는 다른 루틴을 사용하여 디버거에 침입합니다.

User-Mode 중단 루틴

중단 루틴으로 인해 호출 스레드가 호출 프로세스와 연결된 디버거에 신호를 보낼 수 있도록 현재 프로세스에서 예외가 발생합니다.

사용자 모드 프로그램에서 디버거로 전환하려면 DebugBreak 함수를 사용합니다. 프로토타입은 다음과 같습니다.

VOID DebugBreak(VOID);

사용자 모드 프로그램이 DebugBreak를 호출하면 다음과 같은 가능한 작업이 수행됩니다.

  1. 사용자 모드 디버거가 연결된 경우 프로그램은 디버거로 중단됩니다. 즉, 프로그램이 일시 중지되고 디버거가 활성화됩니다.

  2. 사용자 모드 디버거가 연결되지 않았지만 부팅 시 커널 모드 디버깅을 사용하도록 설정한 경우 전체 컴퓨터가 커널 디버거로 중단됩니다. 커널 디버거가 연결되지 않은 경우 컴퓨터가 중지되고 커널 디버거가 대기합니다.

  3. 사용자 모드 디버거가 연결되지 않고 커널 모드 디버깅을 사용하도록 설정되지 않은 경우 프로그램이 처리되지 않은 예외로 종료되고 사후 평가(Just-In-Time) 디버거가 활성화됩니다. 자세한 내용은 Postmortem 디버깅 사용을 참조하세요.

Kernel-Mode 중단 루틴

커널 모드 프로그램이 디버거에 침입하면 커널 디버거에서 실행을 다시 시작할 수 있을 때까지 전체 운영 체제가 중지됩니다. 커널 디버거가 없으면 버그 검사 처리됩니다.

DbgBreakPoint 루틴은 커널 모드 코드에서 작동하지만 디버그Break 사용자 모드 루틴과 유사합니다.

DbgBreakPointWithStatus 루틴도 중단되지만 32비트 상태 코드를 디버거에 추가로 보냅니다.

KdBreakPointKdBreakPointWithStatus 루틴은 확인된 빌드 환경에서 컴파일될 때 각각 DbgBreakPointDbgBreakPointWithStatus와 동일합니다. 무료 빌드 환경에서 컴파일되는 경우 아무런 영향을 주지 않습니다.

조건부 중단 루틴 Kernel-Mode

커널 모드 코드에는 두 가지 조건부 중단 루틴을 사용할 수 있습니다. 이러한 루틴은 논리적 식을 테스트합니다. 식이 false이면 실행이 중지되고 디버거가 활성화됩니다.

  • ASSERT 매크로는 논리 식을 테스트합니다. 식이 false이면 실행이 중지되고 디버거가 활성화됩니다. 실패한 식과 프로그램의 위치가 디버거에 표시됩니다.

  • ASSERTMSG 매크로는 추가 메시지를 디버거로 보낼 수 있다는 점을 제외하고 ASSERT와 동일합니다.

ASSERTASSERTMSG 는 확인된 빌드 환경에서 컴파일된 경우에만 활성화됩니다. 무료 빌드 환경에서 컴파일되는 경우 아무런 영향을 주지 않습니다.