프로그램을 디버그하려는 사용자는 F5 키를 눌러 IDE에서 디버거를 실행할 수 있습니다. 이로 인해 일련의 이벤트가 시작되고, 궁극적으로 IDE가 디버그 엔진(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포트가 프로그램을 시작합니다. 프로그램이 실행되면 런타임 환경은 프로그램을 설명하는 인터페이스를 생성하여IDebugPortNotify2::AddProgramNode에 전달합니다IDebugProgramNode2. 그러면 프로그램이 실행 중임을 포트에 알 수 있습니다. 그런 다음 SDM은 디버그 엔진을 실행 중인 프로그램에 연결합니다.
이 부분에서는
포트에 알리면 프로그램이 시작되고 포트에 알림이 표시되면 어떻게 되는지 설명합니다.
디버그 세션이 프로그램에 DE를 연결할 준비가 되면 시작 문서 후 연결
관련 콘텐츠
- 디버깅 작업에 는 프로그램 시작 및 식 평가와 같은 다양한 디버깅 작업에 대한 링크가 포함되어 있습니다.