Share via


자습서: 동일한 디버깅 세션에서 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 프로젝트용 파일을 만들려면:

  1. Visual Studio를 열고 프로젝트를 만듭니다.

    Esc 키를 눌러 시작 창을 닫습니다. Ctrl + Q를 입력하여 검색 상자를 열고 빈 프로젝트를 입력하고 템플릿을 선택한 다음, C++용 빈 프로젝트를 선택합니다. 표시되는 대화 상자에서 만들기를 선택합니다. 그런 다음, Mixed_Mode_Debugging과 같은 이름을 입력하고 만들기를 클릭합니다.

    빈 프로젝트 프로젝트 템플릿이 표시되지 않는 경우 도구>도구 및 기능 가져오기...로 이동하면 Visual Studio 설치 관리자가 열립니다. Visual Studio 설치 관리자가 시작됩니다. C++를 사용한 데스크톱 개발 워크로드를 선택한 다음, 수정 단추를 선택합니다.

    Visual Studio가 솔루션을 만듭니다.

  2. 솔루션 탐색기에서 원본 파일을 선택한 다음, 프로젝트>새 항목 추가를 선택합니다. 또는 원본 파일을 마우스 오른쪽 단추로 클릭하고 추가>새 항목을 선택합니다.

    모든 항목 템플릿이 표시되지 않으면 모든 템플릿 표시를 선택합니다.

  3. 새 항목 대화 상자에서 C++ 파일(.cpp)을 선택합니다. 이름 필드에 Mixed_Mode.cpp를 입력한 다음, 추가를 선택합니다.

    Visual Studio에서는 솔루션 탐색기에 새 C++ 파일을 추가합니다.

  4. 다음 코드를 Mixed_Mode.cpp에 복사합니다.

    #include "Mixed_Mode.h"
    
  5. 솔루션 탐색기에서 헤더 파일을 선택한 다음, 프로젝트>새 항목 추가를 선택합니다. 또는 헤더 파일을 마우스 오른쪽 단추로 클릭하고 추가>새 항목을 선택합니다.

    모든 항목 템플릿이 표시되지 않으면 모든 템플릿 표시를 선택합니다.

  6. 새 항목 대화 상자에서 헤더 파일(.h)을 선택합니다. 이름 필드에 Mixed_Mode.h를 입력한 다음, 추가를 선택합니다.

    Visual Studio에서는 솔루션 탐색기에 새 헤더 파일을 추가합니다.

  7. 다음 코드를 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
    
  8. 파일>모두 저장을 선택하거나 Ctrl+Shift+S를 눌러 파일을 저장합니다.

DLL 프로젝트를 구성 및 빌드합니다.

  1. Visual Studio 도구 모음에서 디버그 구성 및 x86 또는 x64 플랫폼을 선택합니다. 호출 앱이 항상 64비트 모드로 실행되는 .NET Core인 경우 플랫폼으로 x64를 선택합니다.

  2. 솔루션 탐색기에서 Mixed_Mode_Debugging 프로젝트 노드 및 속성 아이콘을 차례로 선택하거나, 프로젝트 노드를 마우스 오른쪽 단추로 클릭하고 속성을 선택합니다.

  3. 속성 창 맨 위에서 구성활성(디버그)로 설정되고 플랫폼이 도구 모음에서 설정한 것과 동일한 플랫폼 즉, x64 또는 Win32 x86 플랫폼인지 확인합니다.

    Important

    플랫폼을 x86에서 x64로 또는 반대로 전환하는 경우 새 플랫폼의 속성을 다시 구성해야 합니다.

  4. 왼쪽 창의 구성 속성에서 링커>고급을 선택하고, 진입점 없음 옆에 있는 드롭다운 목록에서 아니오를 선택합니다. 아니오로 변경해야 하는 경우 적용을 선택합니다.

  5. 구성 속성에서 일반을 선택하고 구성 유형 옆에 있는 드롭다운 목록에서 동적 라이브러리(.dll)를 선택합니다. 적용을 선택한 다음 확인을 선택합니다.

    Switch to a native DLL

  6. 솔루션 탐색기에서 프로젝트를 선택한 다음, 빌드>솔루션 빌드를 선택하고, F7 키를 누르거나 프로젝트를 마우스 오른쪽 단추로 클릭하여 빌드를 선택합니다.

    프로젝트가 오류 없이 빌드되어야 합니다.

DLL을 호출하는 간단한 관리 앱 만들기

  1. Visual Studio를 연 다음 새 프로젝트를 만듭니다.

    Esc 키를 눌러 시작 창을 닫습니다. Ctrl + Q를 입력하여 검색 상자를 열고 console을 입력하고 템플릿을 선택한 다음, .NET Core용 콘솔 앱 또는 C#용 콘솔 앱(.NET Framework)을 선택합니다. 표시되는 대화 상자에서 다음을 선택합니다.

    그런 다음 Mixed_Mode_Calling_App과 같은 이름을 입력하고 다음 또는 만들기 중 사용 가능한 옵션을 클릭합니다.

    .NET Core의 경우 권장 대상 프레임워크 또는 .NET 8을 선택한 다음 만들기를 선택합니다.

    올바른 프로젝트 템플릿이 표시되지 않는다면 도구>도구 및 기능 가져오기...로 이동합니다. 그러면 Visual Studio 설치 관리자가 열립니다. 필수 구성 요소에 설명된 대로 올바른 .NET 워크로드를 선택한 다음 수정을 선택합니다.

    참고 항목

    기존 C++ 솔루션에 새 관리형 프로젝트를 추가할 수도 있습니다. 혼합 모드 디버깅 작업을 더 어렵게 만들기 위해 새 솔루션에서 프로젝트를 만듭니다.

    Visual Studio에서는 빈 프로젝트를 만들고 솔루션 탐색기에 해당 프로젝트를 표시합니다.

  2. 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();
            }
        }
    }
    
  3. 새 코드에서 [DllImport]의 파일 경로를 방금 만든 Mixed_Mode_Debugging.dll의 파일 경로로 바꿉니다. 힌트에 대한 코드 주석을 참조하세요. 사용자 이름 자리 표시자를 바꿔야 합니다.

  4. 파일>Program.cs 저장을 선택하거나 Ctrl+S를 눌러 파일을 저장합니다.

혼합 모드 디버깅 구성

  1. 솔루션 탐색기에서 Mixed_Mode_Calling_App 프로젝트 노드 및 속성 아이콘을 차례로 선택하거나, 프로젝트 노드를 마우스 오른쪽 단추로 클릭하고 속성을 선택합니다.

  2. 속성에서 네이티브 코드 디버깅을 사용하도록 설정합니다.

    왼쪽 창에서 디버깅을 선택하고 디버그 시작 프로필 UI 열기를 선택하며 네이티브 코드 디버깅 사용 확인란을 선택한 다음, 속성 페이지를 닫아 변경 내용을 저장합니다. Enable mixed mode debugging

    왼쪽 창에서 디버깅을 선택하고 네이티브 코드 디버깅 사용 확인란을 선택한 다음, 속성 페이지를 닫아 변경 내용을 저장합니다.

    Enable mixed mode debugging

  3. .NET Framework 앱에서 x64 DLL을 대상으로 하는 경우 플랫폼 대상을 모든 CPU에서 x64로 변경합니다. 이렇게 하려면 디버그 도구 모음의 솔루션 플랫폼 드롭다운에서 Configuration Manager를 선택해야 할 수 있습니다. 그런 다음, x64로 직접 전환할 수 없는 경우 x64를 대상으로 하는 구성을 만듭니다.

중단점 설정 및 디버깅 시작

  1. C# 프로젝트에서 Program.cs를 엽니다. 맨 왼쪽 여백을 클릭하여 줄을 선택하고 F9를 누르거나, 줄을 마우스 오른쪽 단추로 클릭하고 중단점>중단점 삽입을 선택하여 다음과 같은 코드 줄에서 중단점을 설정합니다.

    int result = Multiply(7, 7);
    

    중단점을 설정하는 경우 왼쪽 여백에 빨간색 원이 나타납니다.

  2. F5 키를 누르고 Visual Studio 도구 모음에서 녹색 화살표를 선택하거나, 디버그>디버깅 시작을 선택하여 디버깅을 시작합니다.

    디버거가 설정한 중단점에서 일시 중지됩니다. 노란색 화살표는 디버거가 현재 일시 중지된 경우를 나타냅니다.

네이티브 코드에 들어가기 및 나오기

  1. 디버깅이 관리 앱에서 일시 중지되는 동안 F11 키를 누르거나 디버그>한 단계씩 코드 실행을 선택합니다.

    디버거가 일시 중지된 경우 Mixed_Mode.h 네이티브 헤더 파일이 열리고 노란색 화살표가 표시됩니다.

    Step into native code

    Step into native code

  2. 이제 중단점을 설정 및 도달하고 네이티브 또는 관리 코드에서 변수를 검사할 수 있습니다.

    • 해당 값을 확인하려면 소스 코드의 변수 위로 마우스를 가져갑니다.

    • 자동 창 및 지역 창에서 변수 및 해당 값을 확인합니다.

    • 디버거에서 일시 중지되는 동안 조사식 창 및 호출 스택 창을 사용할 수 있습니다.

  3. F11 키를 눌러 디버거를 한 줄씩 진행합니다.

  4. Shift+F11 키를 누르거나 디버그>나오기를 선택하여 관리 앱에서 실행을 계속하다가 다시 일시 중지합니다.

  5. F5 키를 누르거나 녹색 화살표를 선택하여 앱을 계속 디버깅합니다.

축하합니다! 혼합 모드 디버깅에 대한 자습서를 모두 마쳤습니다.

다음 단계

이 자습서에서는 혼합 모드 디버깅을 사용하여 관리 앱에서 네이티브 코드를 디버그하는 방법을 알아보았습니다. 다른 디버거 기능에 대한 개요는 다음을 참조하세요.