자습서: 동일한 디버깅 세션에서 C# 및 C++ 디버그
Visual Studio를 사용하면 혼합 모드 디버깅이라고 하는 디버깅 세션에서 둘 이상의 디버거 형식을 사용하도록 설정할 수 있습니다. 이 자습서에서는 단일 디버깅 세션에서 관리 코드와 네이티브 코드를 모두 디버그하는 방법을 알아봅니다.
이 자습서에서는 관리되는 앱에서 네이티브 코드를 디버그하는 방법을 보여 주지만 네이티브 앱 관리 코드를수 있습니다. 또한 디버거는 Python 및 네이티브 코드디버깅, ASP.NET 같은 앱 형식의 스크립트 디버거 사용과 같은 다른 유형의 혼합 모드 디버깅도 지원합니다.
이 자습서에서는 다음을 수행합니다.
- 간단한 네이티브 DLL 만들기
- DLL을 호출하는 간단한 .NET Core 또는 .NET Framework 앱 만들기
- 혼합 모드 디버깅 구성
- 디버거 시작
- 관리되는 앱에서 중단점에 도달
- 네이티브 코드에 진입하기
필수 구성 요소
다음 워크로드와 함께 Visual Studio가 설치되어 있어야 합니다.
- C++ 사용하여 데스크톱 개발
- .NET 데스크톱 개발
다음 워크로드와 함께 Visual Studio가 설치되어 있어야 합니다.
- C++ 사용하여 데스크톱 개발
- 만들려는 앱 유형에 따라 .NET 데스크톱 개발 또는 .NET Core 플랫폼 간 개발.
Visual Studio가 없는 경우 Visual Studio 다운로드 페이지로 이동하여 무료로 설치합니다.
Visual Studio가 설치되어 있지만 필요한 워크로드가 없는 경우, Visual Studio 새 프로젝트 대화 상자의 왼쪽 창에서 Visual Studio 설치 관리자 열기를 선택하세요. Visual Studio 설치 관리자에서 필요한 워크로드를 선택한 다음 수정을 선택합니다.
간단한 네이티브 DLL 만들기
DLL 프로젝트에 대한 파일을 만들려면:
Visual Studio를 열고 프로젝트를 만듭니다.
Esc 눌러 시작 창을 닫습니다. Ctrl + Q 입력하여 검색 상자를 열고, 빈 프로젝트 입력하고, 템플릿선택한 다음, C++에 대해 빈 프로젝트 선택합니다. 표시되는 대화 상자에서 만들기선택합니다. 그런 다음 Mixed_Mode_Debugging 같은 이름을 입력하고 만들기클릭합니다.
빈 프로젝트 프로젝트 템플릿이 표시되지 않으면 도구>도구 및 기능 가져오기...로 이동하여 Visual Studio 설치 관리자를 엽니다. Visual Studio 설치 관리자가 시작됩니다. C++ 워크로드가 포함된 데스크톱 개발을 선택한 후 수정을 선택합니다.
Visual Studio에서 프로젝트를 만듭니다.
솔루션 탐색기원본 파일 선택한 다음 Project>새 항목 추가선택합니다. 오른쪽 단추로 원본 파일 을 클릭한 다음, >을 추가하려면선택합니다.
항목 템플릿이 모두 표시되지 않으면 모든 템플릿표시를 선택합니다.
새 항목 대화 상자에서 C++ 파일(.cpp)선택합니다. 이름 필드에 Mixed_Mode.cpp 입력한 다음 추가를 선택합니다.
Visual Studio는 솔루션 탐색기 새 C++ 파일을 추가합니다.
다음의 코드를, Mixed_Mode.cpp에 복사합니다.
#include "Mixed_Mode.h"
솔루션 탐색기헤더 파일 선택한 다음 Project>새 항목추가를 선택합니다. 또는 헤더 파일 마우스 오른쪽 단추로 클릭하고 추가>새 항목선택합니다.
항목 템플릿이 모두 표시되지 않으면 모든 템플릿표시를 선택합니다.
새 항목 대화 상자에서 헤더 파일(.h)선택합니다. 이름 필드에 Mixed_Mode.h 을 입력한 다음 추가를 선택합니다.
Visual Studio는 솔루션 탐색기 새 헤더 파일을 추가합니다.
다음 코드를 Mixed_Mode.h로 복사합니다.
#ifndef MIXED_MODE_MULTIPLY_HPP #define MIXED_MODE_MULTIPLY_HPP extern "C" { __declspec(dllexport) int __stdcall mixed_mode_multiply(int a, int b) { return a * b; } } #endif
파일> 모든 저장하거나 Ctrl+Shift+S를 눌러 파일을 저장합니다.
DLL 프로젝트를 구성하고 빌드하려면
Visual Studio 도구 모음에서 디버그 구성을 선택한 다음, x86 또는 x64 플랫폼을 선택하세요. 호출 앱이 항상 64비트 모드로 실행되는 .NET Core인 경우 플랫폼으로 x64 선택합니다.
솔루션 탐색기Mixed_Mode_Debugging 프로젝트 노드를 선택하고 속성 아이콘을 선택하거나 프로젝트 노드를 마우스 오른쪽 단추로 클릭하고 속성선택합니다.
속성 패널의 상단에서, 구성이 Active(디버그)로 설정되어 있고 플랫폼이 도구 모음에서 설정한 것과 동일한지 확인하십시오: x86 플랫폼의 경우는 Win32 또는 x64 .
중요하다
플랫폼을 x86 x64 전환하거나 그 반대로 전환하는 경우 새 플랫폼의 속성을 다시 구성해야 합니다.
왼쪽 창의 구성 속성링커>고급선택하고 진입점 없음 옆의 드롭다운에서 없음을 선택합니다. 없음으로 변경해야 하는 경우 적용선택합니다.
구성 속성일반선택하고 구성 유형옆의 드롭다운에서 동적 라이브러리(.dll)선택합니다. 적용을 선택한 다음 확인을 선택합니다.
전환하다
솔루션 탐색기 프로젝트를 선택한 다음, 빌드 >선택하거나 F7 키를 누르거나 프로젝트를 마우스 오른쪽 단추로 클릭하고 빌드 선택합니다.
프로젝트는 오류 없이 빌드되어야 합니다.
DLL을 호출하는 간단한 관리형 앱 만들기
Visual Studio를 열고 새 프로젝트를 만듭니다.
Esc 눌러 시작 창을 닫습니다. Ctrl + Q 입력하여 검색 상자를 열고, 콘솔입력하고, 템플릿을 선택한 다음, C#용 .NET Core 또는 콘솔 앱(.NET Framework)콘솔 앱 선택합니다. 표시되는 대화 상자에서 다음 선택합니다.
그런 다음 Mixed_Mode_Calling_App 같은 이름을 입력하고 다음 클릭하거나 만들기(사용 가능한 옵션)를 클릭합니다.
.NET Core의 경우 권장 대상 프레임워크 또는 .NET 8을 선택한 다음 만들기선택합니다.
올바른 프로젝트 템플릿이 표시되지 않으면 도구>도구 및 기능 가져오기...이동하여 Visual Studio 설치 관리자를 엽니다. 필수 구성 요소에 설명된 대로 올바른 .NET 워크로드를 선택한 다음 수정선택합니다.
메모
새 관리형 프로젝트를 기존 C++ 솔루션에 추가할 수도 있습니다. 혼합 모드 디버깅 작업을 더 어렵게 만들기 위해 새 솔루션에서 프로젝트를 만들고 있습니다.
Visual Studio는 빈 프로젝트를 만들고 솔루션 탐색기표시합니다.
Program.cs 모든 코드를 다음 코드로 바꿉다.
using System; using System.Runtime.InteropServices; namespace Mixed_Mode_Calling_App { public class Program { // Replace the file path shown here with the // file path on your computer. For .NET Core, the typical (default) path // for a 64-bit DLL might look like this: // C:\Users\username\source\repos\Mixed_Mode_Debugging\x64\Debug\Mixed_Mode_Debugging.dll // Here, we show a typical path for a DLL targeting the **x86** option. [DllImport(@"C:\Users\username\source\repos\Mixed_Mode_Debugging\Debug\Mixed_Mode_Debugging.dll", EntryPoint = "mixed_mode_multiply", CallingConvention = CallingConvention.StdCall)] public static extern int Multiply(int x, int y); public static void Main(string[] args) { int result = Multiply(7, 7); Console.WriteLine("The answer is {0}", result); Console.ReadKey(); } } }
새 코드에서
[DllImport]
의 파일 경로를 방금 만든 Mixed_Mode_Debugging.dll의 파일 경로로 바꾸십시오. 힌트는 코드 주석을 참조하세요. 사용자 이름 자리 표시자를 반드시 교체하십시오.파일>저장 Program.cs 선택하거나 Ctrl+S 눌러 파일을 저장합니다.
혼합 모드 디버깅 구성
솔루션 탐색기Mixed_Mode_Calling_App 프로젝트 노드를 선택하고 속성 아이콘을 선택하거나 프로젝트 노드를 마우스 오른쪽 단추로 클릭하고 속성선택합니다.
속성에서 네이티브 코드 디버깅을 사용하도록 설정합니다.
.NET 코드
왼쪽 창에서 디버그 선택하고, 디버그 시작 프로필 UI열고, 네이티브 코드 디버깅 확인란을 선택한 다음, 속성 페이지를 닫아 변경 내용을 저장합니다.
활성화
.NET Framework 코드
왼쪽 메뉴에서 디버그을 선택합니다. 그런 다음 디버거 엔진 섹션에서 네이티브 코드 디버깅 속성을 선택한 다음 속성 페이지를 닫아 변경 내용을 저장합니다.
왼쪽 창에서 디버그 선택하고 네이티브 코드 디버깅 확인란을 선택한 다음 속성 페이지를 닫아 변경 내용을 저장합니다.
활성화
.NET Framework 앱에서 x64 DLL을 대상으로 하는 경우 플랫폼 대상을 CPU x64로 변경합니다. 이렇게 하려면 디버그 도구 모음의 솔루션 플랫폼 드롭다운에서 Configuration Manager 선택해야 할 수 있습니다. 그런 다음 x64로 직접 전환할 수 없는 경우 x64를 대상으로 하는 새 구성을 만듭니다.
중단점 설정 및 디버깅 시작
C# 프로젝트에서 Program.cs엽니다. 다음 코드 줄에 중단점을 설정하려면, 맨 왼쪽 여백을 클릭하거나 줄을 선택하고 F9 키를 누르거나, 줄을 마우스 오른쪽 버튼으로 클릭한 후 중단점>삽입하기를 선택합니다.
int result = Multiply(7, 7);
중단점을 설정한 왼쪽 여백에 빨간색 원이 나타납니다.
F5를 누르고, Visual Studio 도구 모음에서 녹색 화살표를 선택하거나, 디버그>디버그 에서 "디버깅 시작"을 선택하여 디버깅을 시작합니다.
디버거는 설정한 중단점에서 일시 중지됩니다. 노란색 화살표는 디버거가 현재 일시 중지된 위치를 나타냅니다.
네이티브 코드로 진입 및 이탈
관리되는 앱에서 디버깅이 일시 중지되는 동안 F11누르거나 디버그>한 단계씩선택합니다.
Mixed_Mode.h 네이티브 헤더 파일이 열리고 디버거가 일시 중지된 노란색 화살표가 표시됩니다.
이제 네이티브 코드 또는 관리 코드에서 중단점을 설정하고 실행하며 변수를 검사할 수 있습니다.
소스 코드의 변수를 마우스로 가리키면 해당 값이 표시됩니다.
Autos 및 Locals 창에서 변수 및 해당 값을 확인합니다.
디버거에서 일시 중지된 동안 조사식 창과 호출 스택 창을 사용할 수도 있습니다.
디버거를 한 줄 앞으로 이동하려면 F11 다시 누릅니다.
Shift+F11 누르거나 디버그>스텝 아웃을 선택하여 실행을 계속하고 관리되는 앱에서 다시 일시 중지합니다.
F5 누르거나 녹색 화살표를 선택하여 앱 디버깅을 계속합니다.
축하합니다! 혼합 모드 디버깅에 대한 자습서를 완료했습니다.
다음 단계
이 자습서에서는 혼합 모드 디버깅을 사용하도록 설정하여 관리되는 앱에서 네이티브 코드를 디버그하는 방법을 알아보았습니다. 다른 디버거 기능에 대한 개요는 다음을 참조하세요.
먼저 디버거 살펴보기