사용자 지정 .NET 디버거는 일반적으로 별도의 프로세스에서 호스트됩니다. 모바일 플랫폼은 이러한 프로세스 생성을 제한하거나 금지하므로 대상 쪽 사용자 지정 디버거 구성 요소를 대신 애플리케이션 프로세스에 로드해야 합니다.
이 문서는 .NET 11 이상 버전의 모바일 플랫폼(iOS 및 Android)에서 디버거 초기화에만 적용됩니다. NativeAOT에는 적용되지 않습니다.
대상 쪽 구성 요소 구현 및 배포
대상 측 디버거 구성 요소는 진입점 DllGetClassObject이 있는 프로파일러 동적 라이브러리로 구현되어야 합니다. 예제 구현은 .NET 프로파일러 샘플을 참조하세요.
대상 플랫폼의 네이티브 라이브러리 패키징, 코드 서명 및 로드 요구 사항에 따라 애플리케이션의 일부로 libmscordbi 및 libmscordaccore 동적 라이브러리와 함께 배포해야 합니다.
시작 시 대상 측 구성 요소를 로드
CoreCLR이 구성 요소를 프로파일러로 로드하도록 하려면 런타임이 시작되기 전에 다음 환경 설정을 제공합니다.
| 환경 변수 | Value |
|---|---|
DOTNET_ENABLE_PROFILING |
1 |
DOTNET_PROFILER |
{<profiler-CLSID>} |
DOTNET_PROFILER_PATH |
<component-path> |
<profiler-CLSID>를 구성 요소의 프로파일러 GUID로 바꾸고, 둘러싼 중괄호는 그대로 유지하세요.
<component-path>을 대상 앱 배포의 네이티브 구성 요소 경로로 바꾸세요.
이러한 설정에 대한 자세한 내용은 디버깅 및 프로파일링에 대한 런타임 구성 옵션을 참조하세요.
플랫폼의 앱 시작 구성을 사용하여 이러한 설정을 제공합니다.
메모
이 절차에서는 프로파일러 메커니즘을 사용하여 디버거를 초기화하지만 모바일 플랫폼에서 타사 프로파일러에 대한 범용 지원을 설정하지는 않습니다.
디버거 인터페이스 만들기
대상 쪽 구성 요소에서 다음 초기화를 수행합니다.
- 동적 라이브러리
libmscordbi를 로드하고 해당CoreCLRCreateCordbObjectEx익스포트를 호출합니다. 반환된 객체에서ICorDebug에 대해 조회합니다. - ICorDebug::Initialize를 호출하고 관리되는 이벤트 처리기를 ICorDebug::SetManagedHandler에 등록합니다.
- ICorDebug::D ebugActiveProcess를 사용하여 앱에 연결합니다.
초기 모듈 로드 및 시작 이벤트가 누락되지 않도록, DebugActiveProcess가 완료되기 전에 관리 코드 실행이 진행되지 않게 런타임 시작과 연결 시점을 조정합니다.
초기화 후 다른 Unix 플랫폼에서처럼 디버거 인터페이스를 사용합니다 ICorDebug .
.NET