다음을 통해 공유


.NET Framework 2.0의 디버깅 API 변경 내용

이 항목에서는 CLR(공용 언어 런타임) 디버깅 API를 사용할 때 고려해야 할 .NET Framework 버전 2.0의 변경 내용에 대해 설명합니다.

API 변경 내용

  • CorDebug는 더 이상 coclass가 아닙니다. 공동으로 만드는 대신 호스팅 API의 CreateDebuggingInterfaceFromVersion 전역 정적 함수를 사용합니다. 디버거 버전은 CorDebug.idl에 있는 CorDebugInterfaceVersion 열거형의 상수 중 하나여야 합니다. 디버거에서 .NET Framework 2.0을 지원하는 경우에는 CorDebugVersion_2_0 상수를 사용합니다. 호스팅 API의 GetVersionFromProcess 전역 정적 함수를 사용하여 실행 중인 프로세스의 디버기 버전을 가져올 수 있습니다. 또는 호스팅 API의 GetRequestedRuntimeVersion 전역 정적 함수를 사용하여 디스크의 지정된 .exe 파일에 대해 로드될 버전을 최대한 정밀하게 추정하거나 사용자에게 런타임 버전을 선택하도록 요청할 수 있습니다. 호스팅 API의 GetRequestedRuntimeInfo 전역 정적 함수를 사용하여 사용자가 제공한 문자열이 유효한 버전인지 확인할 수 있습니다. 이러한 모든 함수는 MSCorEE.idl에 정의되어 있습니다.

  • 디버거가 .NET Framework 2.0 호환 디버거로 인식되려면 디버거에서 ICorDebugManagedCallback2 인터페이스를 구현해야 합니다.

  • ICorDebugEnum 반환 값은 .NET Framework 2.0에서 COM과 호환됩니다.

  • ICorDebugInternalFrame 개체는 런타임에서 일부 작업을 수행하기 위해 특수 프레임을 추가한 스택 추적에 나타날 수 있습니다. 이러한 프레임은 ICorDebugNativeFrame 또는 ICorDebugILFrame 인터페이스에 대한 QueryInterface 쿼리에 응답하지 않습니다.

  • ICorDebugController::Stop 메서드에 대한 제한 시간은 무시됩니다.

  • ICorDebugModule::EnableJITDebugging 메서드는 모듈을 처음 로드할 때만 사용할 수 있습니다. 이 메서드를 attach 작업의 일부로 발생한 ModuleLoad 콜백에서 사용하는 경우 메서드가 실패합니다. 이 제한은 모듈의 모든 함수에 대한 코드가 일관되도록 하기 위한 것입니다.

  • .NET Framework에서 지정된 함수의 네이티브 코드가 연속된 단일 메모리 블록에 있지 않을 수 있습니다. 결과적으로 디버거에서는 ICorDebugCode 인터페이스의 GetAddress, GetSize 및 GetCode 메서드를 더 이상 사용할 수 없습니다. 대신 ICorDebugCode2::GetCodeChunksICorDebugProcess::ReadMemory 메서드를 사용해야 합니다.

  • 혼합 모드 디버거에서는 새 ICorDebugProcess2::SetUnmanagedBreakpoint 메서드를 사용하여 관리되지 않는 중단점을 설정해야 합니다.

  • .NET Framework 2.0에서 네이티브 스레드 종료 디버그 이벤트는 out-of-band 이벤트입니다.

  • 디버깅 API의 개체는 더욱 적극적으로 무효화됩니다. .NET Framework 1.0 또는 1.1에서 성공한 작업이 .NET Framework 2.0에서 CORDBG_E_OBJECT_NEUTERED를 반환하는 경우 작업을 수행한 인터페이스의 수명이 초과된 것이므로 인터페이스를 다시 가져와야 합니다. .NET Framework 1.0 및 1.1의 작업에서 가져온 값이 올바르지 않을 수도 있습니다.

제네릭

.NET Framework 2.0에 제네릭이 도입되어 이전 버전의 디버거에서 적용한 많은 가정이 더 이상 적용되지 않습니다. 이제 디버거에서는 다음과 같은 제네릭 인식 ICorDebug 함수 형식을 사용해야 합니다.

참고 항목

개념

CLR 디버깅 개요

기타 리소스

디버깅(관리되지 않는 API 참조)