다음을 통해 공유


중단점 바인딩

사용자가 F9를 눌러 중단점을 설정하면 IDE는 요청을 공식화하고 디버그 세션에 중단점을 만들도록 대화 상자를 표시하는 방법을 설명합니다.

중단점 설정

중단점의 영향을 받는 코드나 데이터를 아직 사용할 수 없기 때문에 중단점을 설정하는 것은 2단계 프로세스입니다. 먼저 중단점을 설명한 다음 코드 또는 데이터를 사용할 수 있게 되면 다음과 같이 해당 코드 또는 데이터에 바인딩되어야 합니다.

  1. 관련 DE(디버그 엔진)에서 중단점이 요청된 다음, 중단점이 사용 가능해지면 코드 또는 데이터에 바인딩됩니다.

  2. 중단점 요청은 디버그 세션으로 전송되어 모든 관련 DE에 전송됩니다. 중단점을 처리하도록 선택한 DE는 해당 보류 중인 중단점을 만듭니다.

  3. 디버그 세션은 보류 중인 중단점을 수집하고 디버그 패키지(Visual Studio의 디버깅 구성 요소)로 다시 보냅니다.

  4. 디버그 패키지는 디버그 세션에 보류 중인 중단점을 코드 또는 데이터에 바인딩하라는 메시지를 표시합니다. 디버그 세션은 이 요청을 모든 관련 DE로 보냅니다.

  5. DE가 중단점을 바인딩할 수 있는 경우 중단점 바인딩된 이벤트를 디버그 세션으로 다시 보냅니다. 그렇지 않은 경우에는 중단점 오류 이벤트를 대신 보냅니다.

보류 중인 중단점

보류 중인 중단점은 여러 코드 위치에 바인딩할 수 있습니다. 예를 들어 C++ 템플릿의 소스 코드 줄은 템플릿에서 생성된 모든 코드 시퀀스에 바인딩할 수 있습니다. 디버그 세션은 중단점 바인딩 이벤트를 사용하여 이벤트가 전송된 시점에 중단점에 바인딩된 코드 컨텍스트를 열거할 수 있습니다. 나중에 더 많은 코드 컨텍스트를 바인딩할 수 있으므로 DE는 각 바인딩 요청의 여러 중단점 바인딩 이벤트를 보낼 수 있습니다. 그러나 DE는 바인딩 요청당 하나의 중단점 오류 이벤트만 보내야 합니다.

구현

프로그래밍 방식으로 디버그 패키지는 SDM(세션 디버그 관리자)을 호출하고 설정할 중단점을 설명하는 BP_REQUEST_INFO 구조를 래핑하는 IDebugBreakpointRequest2 인터페이스를 제공합니다. 중단점은 여러 형태가 될 수 있지만 궁극적으로는 코드 또는 데이터 컨텍스트로 확인됩니다.

SDM은 CreatePendingBreakpoint 메서드를 호출하여 각 관련 DE에 이 호출을 전달합니다. DE가 중단점을 처리하도록 선택하면 IDebugPendingBreakpoint2 인터페이스를 만들고 반환합니다. SDM은 이러한 인터페이스를 수집하여 단일 IDebugPendingBreakpoint2 인터페이스로 다시 디버그 패키지에 전달합니다.

지금까지 이벤트가 생성되지 않았습니다.

그런 다음 디버그 패키지는 DE에서 구현하는 Bind를 호출하여 보류 중인 중단점을 코드 또는 데이터에 바인딩하려고 시도합니다.

중단점이 바인딩된 경우 DE는 IDebugBreakpointBoundEvent2 이벤트 인터페이스를 디버그 패키지에 보냅니다. 디버그 패키지는 이 인터페이스를 사용하여 하나 이상의 IDebugBoundBreakpoint2 인터페이스를 반환하는 EnumBoundBreakpoints를 호출하여 중단점에 바인딩된 모든 코드 컨텍스트(또는 단일 데이터 컨텍스트)를 열거합니다. GetBreakpointResolution 인터페이스는 IDebugBreakpointResolution2 인터페이스를 반환하고 GetResolutionInfo는 코드 또는 데이터 컨텍스트를 포함하는 BP_RESOLUTION_INFO 공용 구조체를 반환합니다.

DE가 중단점을 바인딩할 수 없는 경우 단일 IDebugBreakpointErrorEvent2 이벤트 인터페이스를 디버그 패키지에 보냅니다. 디버그 패키지는 GetErrorBreakpoint를 호출한 다음, GetBreakpointResolutionGetResolutionInfo를 호출하여 오류 유형(오류 또는 경고) 및 정보 메시지를 검색합니다. 이렇게 하면 오류 유형 및 메시지가 포함된 BP_ERROR_RESOLUTION_INFO 구조체가 반환됩니다.

DE가 중단점을 처리하지만 바인딩할 수 없는 경우 BPET_TYPE_ERROR 유형의 오류를 반환합니다. 디버그 패키지는 오류 대화 상자를 표시하여 응답하고 IDE는 중단점 문자 모양 내부에 느낌표 모양을 소스 코드 줄의 왼쪽에 배치합니다.

DE가 중단점을 처리하면 바인딩할 수 없지만 다른 DE가 이를 바인딩할 수 있으면 경고가 반환됩니다. IDE는 소스 코드 줄의 왼쪽에 있는 중단점 문자 모양 내부에 물음표 모양을 배치하여 응답합니다.