시작 후 연결
프로그램이 시작되면 디버그 세션이 DE(디버그 엔진)를 해당 프로그램에 연결할 준비가 됩니다.
디자인 의사 결정
공유 주소 공간 내에서 통신하기가 더 간편하므로 디버그 세션과 DE 간의 통신을 설정하는 두 가지 디자인 접근 방식 중에서 선택해야 합니다. 또는 DE와 프로그램 간의 통신을 설정합니다. 다음 중에서 선택합니다.
디버그 세션과 DE 간의 통신을 설정하는 것이 더 적합한 경우 디버그 세션은 DE를 공동으로 만들고 DE에 프로그램에 연결하도록 요청합니다. 이 디자인은 디버그 세션과 DE를 한 주소 공간에 함께 두고 런타임 환경과 프로그램을 다른 주소 공간에 함께 둡니다.
DE와 프로그램 간의 통신을 설정하는 것이 더 적절한 경우 런타임 환경은 DE를 공동으로 만듭니다. 이 디자인은 SDM을 하나의 주소 공간에 두고 DE, 런타임 환경, 프로그램을 다른 주소 공간에 함께 둡니다. 이 디자인은 스크립팅된 언어를 실행하기 위해 인터프리터로 구현되는 DE의 일반적인 디자인입니다.
참고 항목
DE가 프로그램에 연결하는 방법은 구현에 따라 달라집니다. DE와 프로그램 간의 통신도 구현에 따라 달라집니다.
구현
프로그래밍 방식으로 SDM(세션 디버그 관리자)이 시작할 프로그램을 나타내는 IDebugProgram2 개체를 처음 수신하면 Attach 메서드를 호출하여 나중에 디버그 이벤트를 SDM으로 다시 전달하는 데 사용되는 IDebugEventCallback2 개체를 전달합니다. 그런 다음 IDebugProgram2::Attach
메서드는 OnAttach 메서드를 호출합니다. SDM이 IDebugProgram2
인터페이스를 수신하는 방법에 대한 자세한 내용은 포트 알림을 참조하세요.
DE가 디버깅 중인 프로그램과 동일한 주소 공간에서 실행되어야 하는 경우: DE는 일반적으로 스크립트를 실행하는 인터프리터의 일부이므로 IDebugProgramNodeAttach2::OnAttach
메서드는 S_FALSE
를 반환합니다. S_FALSE
반환은 이것이 연결 프로세스를 완료했음을 나타냅니다.
그러나 DE가 SDM의 주소 공간에서 실행되는 경우: IDebugProgramNodeAttach2::OnAttach
메서드가 S_OK
를 반환하거나 IDebugProgramNodeAttach2 인터페이스가 디버깅 중인 프로그램과 연결된 IDebugProgramNode2개체에서 전혀 구현되지 않습니다. 이 경우 Attach 메서드는 결국 연결 작업을 완료하기 위해 호출됩니다.
후자의 경우 IDebugEngine2::Attach
메서드에 전달된 IDebugProgram2
개체에서 GetProgramId 메서드를 호출하고 로컬 프로그램 개체에 GUID
를 저장한 다음 이후에 이 개체에서 IDebugProgram2::GetProgramId
메서드가 호출될 때 이 GUID
를 반환해야 합니다. GUID
는 다양한 디버그 구성 요소에서 고유하게 프로그램을 식별하는 데 사용됩니다.
S_FALSE
를 반환하는 IDebugProgramNodeAttach2::OnAttach
메서드의 경우 프로그램에 사용할 GUID
가 해당 메서드에 전달되고 로컬 프로그램 개체에 GUID
를 설정하는 것은 IDebugProgramNodeAttach2::OnAttach
메서드입니다.
이제 DE가 프로그램에 연결되고 시작 이벤트를 보낼 준비가 되었습니다.