다음을 통해 공유


실행 제어

DE(디버그 엔진)은 일반적으로 다음 이벤트 중 하나를 마지막 시작 이벤트로 보냅니다.

  • 새로 시작된 프로그램에 연결하는 경우 진입점 이벤트

  • 이미 실행 중인 프로그램에 연결하는 경우 로드 완료 이벤트

    이러한 두 이벤트는 모두 이벤트를 중지합니다. 즉, DE가 IDE를 통해 사용자의 응답을 기다립니다. 자세한 내용은 작업 모드를 참조하세요.

이벤트 중지

중지 이벤트가 디버그 세션으로 전송되는 경우:

  1. 현재 명령 포인터를 포함하는 프로그램과 스레드는 이벤트 인터페이스에서 가져올 수 있습니다.

  2. IDE는 편집기에서 강조 표시된 대로 표시되는 현재 소스 코드 파일 및 위치를 결정합니다.

  3. 디버그 세션은 일반적으로 프로그램의 계속 메서드를 호출하여 이 첫 번째 중지 이벤트에 응답합니다.

  4. 그러면 중단점에 도달하는 것과 같은 중지 조건이 발생할 때까지 프로그램이 실행됩니다. 이 경우 DE는 디버그 세션에 중단점 이벤트를 보냅니다. 중단점 이벤트는 중지 이벤트이며 DE는 다시 사용자 응답을 기다립니다.

  5. 사용자가 함수를 한 단계씩 실행, 실행 또는 종료하도록 선택하면 IDE에 디버그 세션에 프로그램의 Step 메서드를 호출하라는 메시지가 표시됩니다. 그런 다음 IDE는 단계 단위(명령, 문 또는 줄)와 단계 유형(함수를 한 단계씩 실행, 실행 또는 종료)을 전달합니다. 단계가 완료되면 DE는 중지 이벤트인 디버그 세션에 단계 완료 이벤트를 보냅니다.

    또는

    사용자가 현재 명령 포인터에서 계속 실행하기로 선택하면 IDE에는 디버그 세션에 프로그램의 Execute 메서드를 호출하라는 메시지가 표시됩니다. 프로그램은 다음 중지 조건이 발생할 때까지 실행을 다시 시작합니다.

    또는

    디버그 세션이 특정 중지 이벤트를 무시하는 경우 디버그 세션은 프로그램의 계속 메서드를 호출합니다. 프로그램이 중지 조건에 도달했을 때 함수를 한 단계씩 실행, 실행 또는 종료한 경우 단계를 계속합니다.

    프로그래밍 방식으로 DE에서 중지 조건이 발생하면 IDebugLoadCompleteEvent2 또는 IDebugEntryPointEvent2와 같은 중지 이벤트를 IDebugEventCallback2 인터페이스를 통해 SDM(세션 디버그 관리자)에 보냅니다. DE는 현재 명령 포인터가 포함된 스레드와 프로그램을 나타내는 IDebugProgram2IDebugThread2 인터페이스를 전달합니다. SDM은 IDebugThread2::EnumFrameInfo를 호출하여 최상위 스택 프레임을 가져오고 IDebugStackFrame2::GetDocumentContext를 호출하여 현재 명령 포인터와 연결된 문서 컨텍스트를 가져옵니다. 이 문서 컨텍스트는 일반적으로 소스 코드 파일 이름, 줄 및 열 번호입니다. IDE는 이를 사용하여 현재 명령 포인터가 포함된 소스 코드를 강조 표시합니다.

    SDM은 일반적으로 IDebugProgram2::Continue를 호출하여 이 첫 번째 중지 이벤트에 응답합니다. 그런 다음, 프로그램은 중단점에 도달하는 것과 같은 중지 조건이 발생할 때까지 실행됩니다. 이 경우 DE는 SDM에 IDebugBreakpointEvent2 인터페이스를 보냅니다. 중단점 이벤트는 중지 이벤트이며 DE는 다시 사용자 응답을 기다립니다.

    사용자가 함수를 한 단계씩 실행, 실행 또는 종료하도록 선택하면 IDE에는 SDM에 IDebugProgram2::Step를 호출하라는 메시지가 표시됩니다. 그런 다음 IDE는 STEPUNIT(명령, 문 또는 줄) 및 STEPKIND, 즉 함수를 한 단계씩 실행, 실행 또는 종료 여부를 전달합니다. 단계가 완료되면 DE는 중지 이벤트인 IDebugStepCompleteEvent2 인터페이스를 SDM에 보냅니다.

    사용자가 현재 명령 포인터에서 계속 실행하기로 선택하면 IDE에서는 SDM에 IDebugProgram2::Execute를 호출하도록 요청합니다. 프로그램은 다음 중지 조건이 발생할 때까지 실행을 다시 시작합니다.

    디버그 패키지가 특정 중지 이벤트를 무시하는 경우 디버그 패키지는 IDebugProgram2::Continue를 호출하는 SDM을 호출합니다. 프로그램이 중지 조건에 도달했을 때 함수를 한 단계씩 실행, 실행 또는 종료한 경우 단계를 계속합니다. 이는 프로그램이 스테핑 상태를 유지하므로 계속 진행하는 방법을 알 수 있음을 의미합니다.

    SDM이 Step, 실행계속에 대해 수행하는 호출은 비동기입니다. 즉, SDM은 호출이 빠르게 반환될 것으로 예상합니다. DE가 Step, 실행 또는 계속이 반환되기 전에 동일한 스레드에서 중지 이벤트를 SDM에 보내는 경우 SDM은 응답을 중지합니다.