런타임 프로세스 디버깅
CLR(공용 언어 런타임) 디버깅 API에서는 런타임 환경에서의 디버깅을 지원합니다. 다음은 런타임 프로세스가 디버깅되는 방법에 대한 단계별 설명입니다.
디버거에서 ICorDebug 인터페이스의 인스턴스를 만듭니다. 디버거는 CLSID CLSID_CorDebug를 사용하여 ICorDebug의 인스턴스를 가져와 CComPtrBase::CoCreateInstance를 호출합니다.
디버거에서 ICorDebug::Initialize 메서드를 호출하여 디버깅 API를 초기화합니다.
디버거에서 관리되는 이벤트 처리기를 등록합니다. 디버거에서는 ICorDebug::SetManagedHandler 메서드를 호출하여, 관리 코드의 이벤트에 대한 알림 및 정보를 받기 위한 콜백으로 ICorDebugManagedCallback 인터페이스의 인스턴스를 등록합니다.
디버거에서 관리되지 않는 이벤트 처리기를 선택적으로 등록합니다. 디버거에서 비관리 코드를 디버깅하려면 ICorDebug::SetUnmanagedHandler 메서드를 호출하여, 비관리 코드의 이벤트에 대한 알림 및 정보를 받기 위한 콜백으로 ICorDebugUnmanagedCallback의 인스턴스를 등록합니다.
디버거에서 디버기 프로세스를 만듭니다. 디버거에서는 ICorDebug::CreateProcess 메서드를 호출하여 프로세스를 만듭니다.
디버깅 API에서 새 디버기 프로세스에 대해 디버거에 알립니다. 디버깅 API에서는 ICorDebugManagedCallback::CreateProcess부터 ICorDebugManagedCallback 메서드를 호출합니다. 이 호출 다음에는 ICorDebugManagedCallback::LoadModule, ICorDebugManagedCallback::LoadClass, ICorDebugManagedCallback::CreateThread 등을 호출할 수 있습니다.
디버거에서 디버깅을 중지합니다. 특정 시점에서 디버거는 디버기가 더 이상 실행되지 않음을 나타내는 ICorDebugManagedCallback::ExitProcess 이벤트를 가져옵니다. 이후 특정 시점에서 디버거는 포함된 인터페이스에 대한 모든 참조를 해제한 다음 ICorDebug::Terminate 메서드를 호출합니다.