CorDebug.idl 인터페이스의 전제 조건
디버깅 인터페이스의 일부 메서드는 디버깅할 프로세스, 즉 디버기가 특정 상태에 있을 때만 호출할 수 있습니다. 이러한 전제 조건은 CorDebug.idl 파일에 선언된 인터페이스의 직접 멤버 메서드에만 적용됩니다. 즉, IUnknown에서 상속되지 않은 메서드에만 적용됩니다.
디버기 상태
다음 단원에서 설명하는 디버기 상태에는 크게 6가지가 있습니다. 이 상태 중 활성, 동기화됨, 운영 체제 고정의 세 가지 상태만 유효합니다.
활성
디버기가 실행되고 있는 유효한 상태입니다. 이 상태는 디버그 이벤트 사이의 상태입니다.
동기화됨
디버기가 중지되고 관리되는 상태가 모두 일시 중단된 유효한 상태입니다. 디버기는 다음 중 한 가지 경우에 이 상태로 전환됩니다.
관리되는 디버그 이벤트가 디스패치된 후 계속되기 전. 관리되는 디버그 이벤트 또는 in-band 네이티브 디버그 이벤트가 디스패치된 후 이벤트가 계속되기 전까지의 기간입니다.
ICorDebugController::Stop 메서드를 호출한 후
운영 체제 고정
디버기가 out-of-band 네이티브 디버깅 이벤트에서 중지된 유효한 상태입니다. 이 상태는 interop 디버깅에만 관련이 있습니다.
아직 초기화되지 않음
디버기가 아직 초기화되지 않은 유효하지 않은 상태입니다. 이 상태는 디버기를 만든 후 ICorDebugManagedCallback::CreateProcess 콜백이 디스패치되기 전까지의 상태입니다. 이 상태에서 CorDebug.idl에 정의된 메서드가 호출되면 이 메서드는 HRESULT 값으로 CORDBG_E_NOTREADY를 반환할 수 있습니다.
비활성
디버깅에 디버기를 더 이상 사용할 수 없는 유효하지 않은 상태입니다. 이 상태에서 CorDebug.idl에 정의된 메서드가 호출되면 이 메서드는 CORDBG_E_PROCESS_DETACHED 및 CORDBG_E_PROCESS_TERMINATED를 비롯한 여러 HRESULT 값 중의 하나를 반환합니다.
복구할 수 없는 오류
ICorDebugManagedCallback::DebuggerError 콜백이 디스패치된 이후 디버기에 적용되는 유효하지 않은 상태입니다. 관리되는 디버깅 서비스가 상당히 손상되었거나 사용할 수 없는 상태임을 의미합니다. 이 상태에서 CorDebug.idl에 정의된 메서드가 호출되면 이 메서드는 HRESULT 값으로 CORDBG_E_UNRECOVERALVE_ERROR를 반환합니다.
메서드 호출 전에 필요한 상태
ICorDebug 인터페이스의 멤버 메서드는 프로세스 개체에서 직접 작동하지 않으므로 선언과 별도로 적용되는 상태 관련 제한 사항이 없습니다. 다른 모든 인터페이스의 멤버 메서드에는 몇 가지 프로세스 관련 선호도가 있습니다. 따라서 이러한 메서드가 호출될 때 디버기 프로세스 상태는 활성, 동기화됨 또는 운영 체제 고정 중 하나여야 합니다.
디버기가 활성 상태일 때 호출할 수 있는 메서드는 다음과 같습니다.
디버기가 운영 체제 고정 상태나 동기화됨 상태일 때 호출할 수 있는 메서드는 다음과 같습니다.
다른 모든 메서드는 디버기가 동기화됨 상태에 있을 때만 호출할 수 있습니다. 그렇지 않으면 메서드에서 HRESULT 값으로 CORDBG_E_PROCESS_NOT_SYNCHRONIZED를 반환할 수 있습니다.