다음을 통해 공유


프로그램에 연결

적절한 포트에 프로그램을 등록한 후에는 디버그할 프로그램에 디버거를 연결해야 합니다.

연결 방법 선택

SDM(세션 디버그 관리자)이 디버그 중인 프로그램에 연결하려고 시도하는 세 가지 방법이 있습니다.

  1. 디버그 엔진이 LaunchSuspended 메서드를 통해 실행하는 프로그램의 경우(예: 해석된 언어의 일반적인 경우) SDM은 연결 중인 프로그램과 관련된 IDebugProgramNode2 개체에서 IDebugProgramNodeAttach2 인터페이스를 가져옵니다. SDM이 IDebugProgramNodeAttach2 인터페이스를 가져올 수 있으면 SDM은 OnAttach 메서드를 호출합니다. 프로그램에 연결되지 않았으며 프로그램에 연결하려고 다른 시도를 할 수 있음을 나타내기 위해 IDebugProgramNodeAttach2::OnAttach 메서드가 S_OK를 반환합니다.

  2. SDM이 연결 중인 프로그램에서 IDebugProgramEx2 인터페이스를 가져올 수 있는 경우 SDM은 Attach 메서드를 호출합니다. 이 방식은 포트 공급자가 원격으로 시작한 프로그램에 일반적입니다.

  3. IDebugProgramNodeAttach2::OnAttach 또는 IDebugProgramEx2::Attach 메서드를 통해 프로그램을 연결할 수 없는 경우 SDM은 CoCreateInstance 함수를 호출하여 디버그 엔진(아직 로드되지 않은 경우)을 로드한 다음, Attach 메서드를 호출합니다. 이 방법은 포트 공급자가 로컬로 시작하는 프로그램에 일반적입니다.

    사용자 지정 포트 공급자가 IDebugProgramEx2::Attach 메서드의 사용자 지정 포트 공급자 구현에서 IDebugEngine2::Attach 메서드를 호출하는 것도 가능합니다. 일반적으로 이 경우 사용자 지정 포트 공급자는 원격 머신에서 디버그 엔진을 시작합니다.

    SDM(세션 디버그 관리자)이 Attach 메서드를 호출하면 연결이 수행됩니다.

    디버그할 애플리케이션과 동일한 프로세스에서 DE를 실행하는 경우 IDebugProgramNode2의 다음 메서드를 구현해야 합니다.

  1. IDebugEngineCreateEvent2 이벤트 개체를 SDM에 보냅니다. 자세한 내용은 이벤트 보내기를 참조하세요.

  2. IDebugEngine2::Attach 메서드에 전달된 IDebugProgram2 개체에서 GetProgramId 메서드를 호출합니다.

    프로그램을 식별하는 데 사용되는 GUID를 반환합니다. GUID는 DE에 대한 로컬 프로그램을 나타내는 개체에 저장되어야 하며 IDebugProgram2 인터페이스에서 IDebugProgram2::GetProgramId 메서드가 호출될 때 반환되어야 합니다.

    참고 항목

    IDebugProgramNodeAttach2 인터페이스를 구현하면 프로그램의 GUIDIDebugProgramNodeAttach2::OnAttach 메서드로 전달됩니다. 이 GUIDIDebugProgram2::GetProgramId 메서드에서 반환된 프로그램의 GUID에 사용됩니다.

  3. SDM에게 프로그램을 나타내기 위해 로컬 IDebugProgram2 개체가 만들어졌음을 알리기 위한 IDebugProgramCreateEvent2 이벤트 개체를 DE에 보냅니다. 자세한 내용은 이벤트 보내기를 참조하세요.

    참고 항목

    IDebugEngine2::Attach 메서드에 전달된 IDebugProgram2 개체와 동일한 개체가 아닙니다. 이전에 전달된 IDebugProgram2 개체는 포트에서만 인식되며 별도의 개체입니다.