연습: 관리 코드와 네이티브 코드가 모두 포함된 솔루션 디버깅
업데이트: 2007년 11월
이 연습에서는 관리되는 .NET Compact Framework와 네이티브 구성 요소가 모두 포함된 솔루션을 디버깅하기 위한 단계를 제공합니다. Visual Studio에서는 장치 응용 프로그램에 대한 interop 디버깅을 지원하지 않습니다. 즉, 네이티브 디버거와 관리되는 디버거를 동시에 연결할 수 없습니다.
네이티브 요소와 관리되는 요소가 통합된 솔루션을 디버깅하기 위한 바람직한 방법은 특정 섹션(예: 관리되는 섹션)에 필요한 디버거를 연결한 다음 다른 디버거가 필요할 때 해당 디버거를 분리하고 다른 디버거를 연결하는 것입니다. 프로그램을 단계별로 실행하기 위해 이러한 분리/연결 단계를 반복할 수 있습니다.
참고: |
---|
다음 지침처럼 컴퓨터에서 Visual Studio 사용자 인터페이스 요소 일부에 대한 이름이나 위치를 다르게 표시할 수 있습니다. 이러한 요소는 사용하는 Visual Studio 버전 및 설정에 따라 결정됩니다. 자세한 내용은 Visual Studio 설정을 참조하십시오. |
이 연습은 Visual C# 개발 설정을 사용하여 작성했습니다. 여기에는 다음 단원이 포함되어 있습니다.
관리되는 디버거 연결 활성화
응용 프로그램 시작
네이티브 코드에 중단점 설정
네이티브 디버거와 연결
네이티브 중단점까지 실행
관리되는 디버거와 연결
관리 코드에 중단점 설정
관리되는 중단점까지 실행
결론
사전 요구 사항
이 연습은 다른 연습인 연습: Hello World: 스마트 장치에 대한 COM Interop 예제에서 빌드된 솔루션을 기반으로 합니다. 이 연습을 빌드하고 실행했는지 확인합니다.
관리되는 디버거 연결 활성화
기본적으로 에뮬레이터를 비롯한 장치에서는 이미 실행 중인 프로세스에 관리되는 디버거를 연결할 수 없습니다. 그러나 관리되는 디버거를 이미 실행 중인 프로세스에 연결하는 작업은 관리 코드와 네이티브 코드를 모두 포함하는 장치 솔루션에서 일반적으로 수행하는 작업입니다.
따라서 제일 먼저 해야 할 일은 이미 실행 중인 프로세스에 관리되는 디버거가 연결될 수 있도록 장치를 설정하는 것입니다. 이렇게 하려면 장치에 대한 레지스트리 키를 설정합니다.
참고: |
---|
키를 설정하면 이미 실행 중인 관리되는프로세스에 연결할 때만 영향을 줍니다. 디버깅 시작(F5)을 사용하여 프로젝트를 시작하는 경우에는 영향을 주지 않습니다. 그러나 디버깅 시작 후에 분리하는 경우 이 프로세스를 다시 연결하고 디버깅을 다시 시작해야 합니다. |
관리되는 디버거가 실행 중인 프로세스에 연결할 수 있도록 하려면
Windows 시작 메뉴에서 모든 프로그램, Microsoft Visual Studio 2008, Visual Studio Remote Tools를 차례로 가리킨 다음 원격 레지스트리 편집기를 클릭합니다.
Select a Windows CE Device 창에서 Windows Mobile 5.0 Pocket PC SDK를 확장한 다음 Windows Mobile 5.0 Pocket PC Emulator를 클릭합니다. 이 연습에서는 이 장치를 대상 장치로 사용합니다.
확인을 클릭합니다.
장치에 연결 중 진행 창이 열리고 이어서 장치 에뮬레이터 및 Windows CE 원격 레지스트리 편집기가 열립니다.
레지스트리 편집기에서 Windows Mobile 5.0 Pocket PC Emulator를 확장한 다음 HKEY_LOCAL_MACHINE\SOFTWARE\Microsot\.NETCompactFramework\Managed Debugger 키를 만듭니다.
.NETCompactFramework를 마우스 오른쪽 단추로 클릭하고 새로 만들기를 가리킨 다음 키를 클릭하여 키를 만듭니다.
"Managed"와 "Debugger" 사이에는 공백이 하나 있습니다.
AttachEnabled라는 DWORD를 만듭니다.
Managed Debugger를 마우스 오른쪽 단추로 클릭하고 새로 만들기를 가리킨 다음 DWORD 값을 클릭하여 DWORD를 만듭니다.
이름을 AttachEnabled로 설정하고 값을 1로 설정합니다.
참고: 이 장치 디버그 키를 설정하면 성능이 크게 저하됩니다. 디버깅을 하지 않을 때는 데이터 값을 다시 0으로 설정하여 이 기능을 비활성화합니다.
나머지 단계에서 이 레지스트리 설정을 유지하도록 장치 에뮬레이터를 열어 둡니다. 레지스트리 편집기는 닫아도 됩니다.
응용 프로그램 시작
다음 단계는 InteropSolution 응용 프로그램을 시작하는 것입니다.
응용 프로그램을 시작하려면
연습: Hello World: 스마트 장치에 대한 COM Interop 예제에서 만든 솔루션을 엽니다.
Windows Mobile 5.0 Pocket PC Emulator가 도구 모음의 대상 장치에 나타나는지 확인합니다.
Visual Studio 디버그 메뉴에서 디버깅 시작을 클릭하거나 F5 키를 누릅니다.
이 단계를 수행하면 사용자의 추가 작업 없이 HelloCOMObject 네이티브 프로젝트가 즉시 에뮬레이터에 배포됩니다.
SayHello 배포 대화 상자가 열리면 Windows Mobile 5.0 Pocket PC Emulator를 선택한 다음 배포를 클릭합니다.
이 단계를 수행하면 관리되는 프로젝트가 배포됩니다.
응용 프로그램이 에뮬레이터에서 열립니다. 아직 단추를 클릭하지 마십시오.
네이티브 코드에 중단점 설정
다음 단계는 네이티브 코드에 중단점을 설정하여 네이티브 디버거를 연결할 준비를 하는 것입니다.
네이티브 코드에 중단점을 설정하려면
솔루션 탐색기에서 Hello.cpp를 마우스 오른쪽 단추로 클릭하고 코드 보기를 클릭합니다.
코드 편집기의 왼쪽 여백을 클릭하여 *text로 시작되는 줄에 중단점을 삽입합니다.
느낌표가 있는 빈 원으로 중단점이 표시되며 이는 현재로서는 중단점을 확인할 수 없음을 나타냅니다. 이는 현재 적절한 기호와 소스가 없기 때문입니다.
Visual Studio 디버그 메뉴에서 창을 가리킨 다음 모듈을 클릭합니다.
모듈 창에 관리되는 응용 프로그램 SayHello.exe를 비롯하여 지금까지 로드된 모든 모듈이 표시됩니다. 네이티브 HelloCOMObject.dll은 로드되지 않았는데 이는 응용 프로그램에서 해당 단추를 아직 클릭하지 않았기 때문입니다.
네이티브 디버거와 연결
다음 단계는 네이티브 디버거와 연결할 수 있도록 관리되는 디버거를 분리하는 것입니다. 장치 프로젝트의 경우 두 디버거를 모두 동시에 연결할 수 없습니다. 관리되는 디버거에서 네이티브 디버거로 전환해야 할 때는 언제든지 다음 단계를 따릅니다.
네이티브 디버거와 연결하려면
Visual Studio 디버그 메뉴에서 모두 분리를 클릭합니다.
이렇게 하면 관리되는 디버거가 분리되지만 응용 프로그램은 계속 실행될 수 있습니다.
디버그 메뉴에서 프로세스에 연결을 클릭합니다.
전송 상자에서 스마트 장치를 선택합니다.
한정자 상자를 채우려면 찾아보기를 클릭합니다.
장치에 연결 대화 상자에서 Windows Mobile 5.0 Pocket PC Emulator를 선택한 다음 연결을 클릭합니다.
연결 대상 상자를 채우려면 선택을 클릭합니다.
코드 형식 선택 대화 상자에서 다음 코드 형식 디버깅을 선택한 다음 관리 확인란의 선택을 취소하고 네이티브 확인란을 선택한 다음 확인을 클릭합니다.
사용 가능한 프로세스 상자에서 SayHello.exe를 선택한 다음 연결을 클릭합니다.
네이티브 디버거와 연결되었습니다.
네이티브 중단점까지 실행
네이티브 코드에 설정한 중단점까지 진행할 준비가 되었습니다. 이제 모듈 창을 다시 보면 네이티브 모듈이 보입니다. 그러나 button1을 클릭하지 않았으므로 HelloCOMObject.dll은 아직 로드되지 않았습니다.
참고: |
---|
전에 이 연습을 실행한 적이 있으면 디버그 기호가 이미 로드되었을 수 있으므로 해당 단계를 생략할 수 있습니다. 그렇지 않으면 다음 단원에서 디버그 기호를 로드하기 위한 단계를 제공합니다. |
네이티브 중단점까지 실행하려면
장치 에뮬레이터 폼에서 button1을 클릭합니다.
폼에 Hello World! 메시지가 나타나고 hellocomobject.dll이 모듈 창에 나타납니다.
hellocomobject.dll에 대한 기호 상태 열에 기호가 로드되었습니다.가 표시되지 않으면 다음 단계를 따릅니다.
hellocomobject.dll을 마우스 오른쪽 단추로 클릭한 다음 기호 로드를 클릭합니다.
기호 찾기 대화 상자에서 InteropSolution\HelloCOMObject\Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\Debug\HelloCOMObject.pdb로 이동합니다.
열기를 클릭합니다.
기호 상태 열이 기호가 로드되었습니다.로 변경되고, 중단점 표시기는 중단점이 확인되었음을 표시합니다.
장치 에뮬레이터 폼의 Hello World! 창에서 확인을 클릭한 다음 button1을 다시 클릭합니다.
중단점 표시기는 중단점에서 실행이 중지되었음을 보여 줍니다.
디버그 메뉴에서 한 단계씩 코드 실행을 클릭하거나 F11 키를 누릅니다.
다음 줄까지 실행됩니다. 이렇게 하여 솔루션의 네이티브 부분을 단계별로 실행할 수 있습니다.
관리되는 디버거와 연결
다음 단계는 관리되는 디버거와 연결할 수 있도록 네이티브 디버거를 분리하는 것입니다. 장치 프로젝트의 경우 두 디버거를 모두 동시에 연결할 수 없습니다. 네이티브 디버거에서 관리되는 디버거로 전환해야 할 때는 언제든지 다음 단계를 따릅니다.
관리되는 디버거와 연결하려면
Visual Studio 디버그 메뉴에서 모두 분리를 클릭합니다.
이렇게 하면 네이티브 디버거가 분리되지만 응용 프로그램은 계속 실행될 수 있습니다.
디버그 메뉴에서 프로세스에 연결을 클릭하고 전송 상자에 스마트 장치가 있는지 확인합니다.
선택을 클릭하고 Windows Mobile 5.0 Pocket PC Emulator를 선택한 다음 연결을 클릭하여 한정자 상자를 채웁니다.
연결 대상 상자를 채우려면 선택을 클릭하고 다음 코드 형식 디버깅을 선택한 다음 관리 상자를 선택하고 네이티브 상자의 선택을 취소한 다음 확인을 클릭합니다.
관리되는 디버깅과 네이티브 디버깅이 호환되지 않는다는 메시지가 나타나면 확인을 클릭합니다.
사용 가능한 프로세스 상자에서 SayHello.exe를 선택한 다음 연결을 클릭합니다.
관리되는 디버거가 연결되었습니다.
관리 코드에 중단점 설정
다음 단계는 관리 코드에 중단점을 설정하여 관리되는 디버거를 연결할 준비를 하는 것입니다.
관리 코드에 중단점을 설정하려면
솔루션 탐색기에서 Form1.cs를 마우스 오른쪽 단추로 클릭한 다음 코드 보기를 클릭합니다.
string text; 줄에 중단점을 삽입합니다.
관리되는 중단점까지 실행
관리 코드에 설정한 중단점까지 진행할 준비가 되었습니다.
관리되는 중단점까지 실행하려면
장치 에뮬레이터에서 button1을 클릭합니다.
중단점에서 실행이 중지됩니다.
결론
최적의 성능을 위해, 이미 실행 중인 프로세스에 관리되는 디버거를 더 이상 연결할 필요가 없으면 장치 레지스트리 키를 다시 0으로 설정하십시오.