프로그램 시작
프로그램을 디버그할 사용자는 F5 키를 눌러 IDE에서 디버거를 실행할 수 있습니다. 그러면 궁극적으로 IDE가 DE(디버그 엔진)에 연결되도록 하는 일련의 이벤트가 시작되며, DE(디버그 엔진)는 차례로 다음과 같이 프로그램에 연결됩니다.
IDE는 먼저 프로젝트 패키지를 호출하여 솔루션의 활성 프로젝트 디버그 설정을 가져옵니다. 설정에는 시작 디렉터리, 환경 변수, 프로그램이 실행될 포트 및 지정된 경우 프로그램을 만드는 데 사용할 DE가 포함됩니다. 이러한 설정은 디버그 패키지에 전달됩니다.
DE가 지정되면 DE는 운영 체제를 호출하여 프로그램을 시작합니다. 프로그램 실행의 결과로 프로그램의 런타임 환경이 로드됩니다. 예를 들어 프로그램이 MSIL로 작성된 경우 공용 언어 런타임이 호출되어 프로그램을 실행합니다.
또는
DE가 지정되지 않은 경우 포트는 운영 체제를 호출하여 프로그램을 시작하므로 프로그램의 런타임 환경이 로드됩니다.
참고 항목
DE를 사용하여 프로그램을 시작하는 경우 동일한 DE가 프로그램에 연결될 가능성이 높습니다.
DE 또는 포트가 프로그램을 시작했는지 여부에 따라 DE 또는 런타임 환경이 프로그램 설명 또는 노드를 생성하고 프로그램이 실행되고 있음을 포트에 알립니다.
참고 항목
프로그램 노드는 디버깅할 수 있는 프로그램의 간단한 표현이므로 런타임 환경에서 프로그램 노드를 만드는 것이 좋습니다. 프로그램 노드를 만들고 등록하기 위해 전체 DE를 로드할 필요가 없습니다. DE가 IDE의 프로세스에서 실행되도록 디자인되었지만 실제로 실행 중인 IDE가 없는 경우, 포트에 프로그램 노드를 추가할 수 있는 구성 요소가 필요합니다.
새로 만든 프로그램은 관련되거나 관련되지 않은 다른 프로그램과 함께 동일한 IDE에서 시작되거나 연결되어 디버그 세션을 구성합니다.
프로그래밍 방식으로 사용자가 처음 F5 키를 누르면 Visual Studio의 디버그 패키지는 DebugLaunch 메서드를 통해 프로젝트 패키지(실행 중인 프로그램 형식과 연결됨)를 호출하며, 이 패키지는 VsDebugTargetInfo2 솔루션의 활성 프로젝트 디버그 설정으로 구조를 채웁니다 이 구조는 LaunchDebugTargets2 메서드 호출을 통해 디버그 패키지로 다시 전달됩니다. 그런 다음 디버그 패키지는 SDM(세션 디버그 관리자)를 인스턴스화하여 디버그 중인 프로그램 및 관련 디버그 엔진을 시작합니다.
SDM에 전달되는 인수 중 하나는 프로그램을 시작하는 데 사용할 DE의 GUID입니다.
DE GUID가
GUID_NULL
이 아닌 경우 SDM은 DE를 공동으로 만든 다음, LaunchSuspended 메서드를 호출하여 프로그램을 시작합니다. 예를 들어 프로그램이 네이티브 코드로 작성된 경우IDebugEngineLaunch2::LaunchSuspended
는 프로그램을 실행하기 위해CreateProcess
및ResumeThread
(Win32 함수)를 호출할 것입니다.프로그램 실행의 결과로 프로그램의 런타임 환경이 로드됩니다. DE 또는 런타임 환경은 프로그램을 설명하는 IDebugProgramNode2 인터페이스를 만들고 이 인터페이스를 AddProgramNode에 전달하여 프로그램이 실행되고 있음을 포트에 알립니다.
GUID_NULL
이 전달되면 포트가 프로그램을 시작합니다. 프로그램이 실행되면 런타임 환경은 프로그램을 설명하는IDebugProgramNode2
인터페이스를 만들고 이를IDebugPortNotify2::AddProgramNode
에 전달합니다. 그러면 프로그램이 실행 중임을 포트에 알립니다. 그런 다음 SDM은 디버그 엔진을 실행 중인 프로그램에 연결합니다.
이 섹션의 내용
포트 알림은 프로그램이 시작되고 포트에 알림이 표시되면 어떻게 되는지 설명합니다.
시작 후 연결은 디버그 세션이 DE를 프로그램에 연결할 준비가 되면 문서화합니다.
관련 콘텐츠
- 디버깅 작업 프로그램 시작, 식 평가 등의 다양한 디버깅 작업에 대한 링크를 포함합니다.