업데이트: 2007년 11월
이 항목에서는 CLR(공용 언어 런타임) 디버깅 API에서 일반적인 디버깅 시나리오를 처리하는 방법에 대해 설명합니다. CLR에서는 일부 시나리오를 직접적으로 지원하며 다른 메서드를 지원하기 위해 현재 메서드와 상호 작용합니다.
Out-of-Process 디버깅
Out-of-process 디버깅에서는 디버거가 디버깅하고 있는 프로세스와 별도의 프로세스에 있습니다. 즉, 디버거가 디버기 외부에 있습니다. 이 시나리오에서는 디버거와 디버기 간의 상호 작용이 줄어듭니다. 따라서 프로세스를 더욱 정확하게 파악할 수 있습니다.
CLR 디버깅 API에서는 out-of-process 디버깅을 직접적으로 지원합니다. API에서는 디버거와 디버기의 관리되는 부분 간의 모든 통신을 처리하여 관리 코드 디버깅을 지원합니다.
CLR 디버깅 API도 out-of-process로 사용될 수 있지만 스레드 동기화와 같은 일부 디버깅 논리는 디버기에서 in-process로 발생합니다. 대부분의 경우 이 사항은 디버거에 투명하게 알려야 하는 구현 정보입니다. 스레드 동기화에 대한 자세한 내용은 CLR 디버깅 아키텍처를 참조하십시오. 그러나 디버깅 API를 out-of-process로 사용할 경우 크래시 덤프를 검사할 수 없다는 단점이 있습니다.
In-Process 디버깅
.NET Framework 버전 1.0 및 1.1의 CLR 디버깅 API에서는 프로파일러에서 디버깅 API의 검사 기능을 사용할 수 있는 제한된 in-process 디버깅을 지원했습니다. .NET Framework 2.0에서는 in-process 디버깅이 프로파일링 API와 더욱 일관성이 있는 기능 집합으로 바뀌었습니다. 이러한 변경 내용에 대한 자세한 내용은 프로파일링 개요에서 스택 스냅숏 및 개체 검사 기능을 참조하십시오.
원격 프로세스 디버깅
원격 프로세스 디버깅에서는 디버거 사용자 인터페이스가 디버깅되고 있는 프로세스와 별도의 컴퓨터에 있습니다. 디버거가 디버기와 동일한 컴퓨터에서 실행되고 있을 때 제한된 리소스, 위치 종속성 또는 운영 체제에 방해가 되는 버그로 인해 디버거가 디버기에 방해되는 경우에 이 시나리오가 유용할 수 있습니다.
CLR 디버깅 API에서는 원격 프로세스 디버깅을 직접적으로 지원하지 않습니다. CLR 디버깅 API를 기반으로 하는 디버거는 디버기에서 out-of-process로 유지되어야 합니다. 따라서 이 솔루션을 사용하려면 디버기와 동일한 컴퓨터에 프록시 프로세스가 있어야 합니다.
비관리 코드 디버깅
관리 코드가 비관리 코드와 같은 프로세스에 함께 있을 수 있으므로 두 종류의 코드를 동시에 디버깅할 경우가 있습니다.
CLR 디버깅 API에서는 비관리 코드 디버깅을 직접적으로 지원하지 않습니다. 그러나 Win32 디버깅 기능을 공유하면 CLR 디버깅 API를 비관리 코드 디버거와 함께 사용할 수 있습니다. 관리 코드와 비관리 코드 간의 경계를 단계별로 실행할 수 있는 기능도 제공됩니다.
또한 CLR 디버깅 API에서는 프로세스를 디버깅하기 위한 다음 두 가지 옵션을 제공합니다.
부분 연결(Soft attach) 옵션 - 프로세스의 관리되는 부분만 디버깅합니다. 프로세스에 부분 연결된 디버거는 나중에 프로세스에서 분리할 수 있습니다.
전체 연결(Hard attach) 옵션 - 프로세스의 관리되는 부분과 관리되지 않는 부분을 모두 디버깅하며 모든 Win32 디버그 이벤트가 디버깅 API를 통해 노출됩니다.
혼합 언어 환경
구성 요소 소프트웨어에서 각 구성 요소는 서로 다른 언어를 사용하여 작성될 수 있습니다. 디버거에서 데이터를 올바른 형식으로 표시하고, 올바른 구문을 사용하여 식을 계산하는 등의 작업을 수행할 수 있도록 코드가 다른 언어로 되어 있는 경우를 디버거에서 인식해야 합니다.
CLR에는 소스 언어라는 개념이 없기 때문에 CLR 디버깅 API에서는 혼합 언어 환경을 직접적으로 지원하지 않습니다. 디버거의 기존 소스 매핑 기능을 사용하여 지정한 함수를 함수가 구현된 언어에 매핑할 수 있어야 합니다.
다중 프로세스 및 분산 프로그램
구성 요소 프로그램에는 다른 프로세스에서 또는 전체 네트워크에 있는 다른 컴퓨터에서 실행되고 있는 구성 요소 조합이 포함될 수 있습니다. 디버거에서는 프로세스 및 컴퓨터 간의 실행 논리를 추적하여 현재 진행되고 있는 작업에 대한 논리 뷰를 제공할 수 있어야 합니다.
CLR 디버깅 API에서는 다중 프로세스 디버깅을 직접적으로 지원하지 않습니다. 반면 API를 사용하는 디버거에서는 이러한 지원을 직접적으로 제공하며 이를 수행하는 기존 메서드가 계속 작동합니다.