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