Поделиться через


Руководство. Отладка C# и C++ в одном сеансе отладки

Visual Studio позволяет включить несколько типов отладчика в сеансе отладки, который называется отладкой в смешанном режиме. В этом руководстве описано, как выполнять отладку управляемого и машинного кода в одном сеансе отладки.

В этом руководстве показано, как отлаживать нативный код из управляемого приложения, но можно также отладить управляемый код из нативного приложения. Отладчик также поддерживает другие типы отладки в смешанном режиме, такие как отладка Python и машинного кода, а также использование отладчика скрипта в типах приложений, таких как ASP.NET.

В этом руководстве описано следующее:

  • Создание простой собственной библиотеки DLL
  • Создание простого приложения .NET Core или .NET Framework для вызова библиотеки DLL
  • Настройка отладки в смешанном режиме
  • Запуск отладчика
  • Достигнута точка останова в управляемом приложении
  • Шаг в нативный код

Необходимые условия

Необходимо установить Visual Studio со следующими рабочими нагрузками:

  • Разработка настольных приложений с помощью C++
  • разработка настольных приложений .NET

Необходимо установить Visual Studio со следующими рабочими нагрузками:

  • Разработка настольных приложений с помощью C++
  • разработка настольных приложений .NET или кроссплатформенная разработка .NET Coreв зависимости от типа приложения, которое вы хотите создать.

Если у вас нет Visual Studio, перейдите на страницу загрузки Visual Studio, чтобы установить его бесплатно.

Если у вас установлена Visual Studio, но отсутствуют необходимые рабочие компоненты, выберите Открыть установщик Visual Studio в левой части диалогового окна Новый проект. В установщике Visual Studio выберите необходимые рабочие нагрузки, а затем выберите Изменить.

Создание простой собственной библиотеки DLL

Создание файлов для проекта DLL:

  1. Откройте Visual Studio и создайте проект.

    Нажмите клавишу Esc, чтобы закрыть начальное окно. Введите CTRL+ Q, чтобы открыть поле поиска, введите пустой проект, выберите Шаблоны, а затем выберите Пустой проект для C++. В появившемся диалоговом окне выберите Создать. Затем введите имя, например Mixed_Mode_Debugging, и нажмите Создать.

    Если вы не видите шаблон проекта пустого проекта, перейдите в раздел Инструменты>Получить инструменты и компоненты..., который открывает Visual Studio Installer. Установщик Visual Studio запускается. Выберите рабочую нагрузку Разработка настольных приложений на C++, а затем выберите Изменить.

    Visual Studio создает проект.

  2. В обозревателе решений выберите Исходные файлы, а затем выберите Проект>Добавление нового элемента. Или щелкните правой кнопкой мыши Исходные файлы и выберите Добавить>Новый элемент.

    Если вы не видите все шаблоны элементов, выберите Показать все шаблоны.

  3. В диалоговом окне новый элемент выберите файл C++ (.cpp). Введите Mixed_Mode.cpp в поле Имя, а затем выберите Добавить.

    Visual Studio добавляет новый файл C++ в обозревателе решений.

  4. Скопируйте следующий код в Mixed_Mode.cpp:

    #include "Mixed_Mode.h"
    
  5. В обозревателе решений выберите файлы заголовков, а затем выберите Project>Добавить новый элемент. Или щелкните правой кнопкой мыши Файлы заголовков и выберите Добавить>Новый элемент.

    Если вы не видите все шаблоны элементов, выберите Показать все шаблоны.

  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. Если вызывающее приложение будет .NET Core, которое всегда работает в 64-разрядном режиме, выберите x64 в качестве платформы.

  2. В Проводнике решенийвыберите элемент проекта Mixed_Mode_Debugging и щелкните значок Свойства, или щелкните правой кнопкой мыши элемент проекта и выберите Свойства.

  3. В верхней части области свойств убедитесь, что конфигурации задано значение Active(Debug), платформы совпадает с тем, что задано на панели инструментов: x64или Win32 для платформы x86.

    Важный

    Если вы переключаете платформу с x86 на x64 или наоборот, необходимо перенастроить свойства для новой платформы.

  4. В разделе Свойства конфигурации в левой области выберите Компоновщик>Дополнительнои в раскрывающемся списке рядом с Нет точки входавыберите Нет. Если вы должны изменить его на Нет, выберите Применить.

  5. В разделе Свойства конфигурациивыберите Общиеи в раскрывающемся списке рядом с Тип конфигурациивыберите Динамическая библиотека (.dll). Выберите Применить, а затем выберите ОК.

    Переключитесь на родную библиотеку DLL

  6. Выберите проект в обозревателе решений , а затем выберите Сборка>решение сборки, нажмите клавишу F7или щелкните проект правой кнопкой мыши и выберите Сборка.

    Проект должен создаваться без ошибок.

Создание простого управляемого приложения для вызова библиотеки DLL

  1. Откройте Visual Studio и создайте проект.

    Нажмите клавишу Esc, чтобы закрыть начальное окно. Введите Ctrl + Q, чтобы открыть поле поиска, введите консоль, выберите Шаблоны, и затем выберите консольное приложение для .NET Core или консольное приложение (.NET Framework) для C#. В появившемся диалоговом окне выберите Далее.

    Затем введите имя, например Mixed_Mode_Calling_App, и нажмите кнопку Далее или Создать, независимо от того, какой вариант доступен.

    Для .NET Core выберите рекомендуемую целевую платформу или .NET 8, а затем выберите Создать.

    Если вы не видите правильный шаблон проекта, перейдите в раздел Tools>Get Tools and Features..., который открывает установщик 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. Включите отладку машинного кода в свойствах.

    код .NET

    Выберите Отладка в левой области, выберите Открыть интерфейс профилей отладки, затем установите флажок Включить отладку нативного кода, а затем закройте страницу свойств, чтобы сохранить изменения.

    Включить отладку в смешанном режиме

    код .NET Framework

    В меню слева выберите Отладка. Затем в разделе обработчиков отладчика выберите свойство Включить отладку машинного кода, а затем закройте страницу свойств, чтобы сохранить изменения.

    Установите флажок Отладка в левой области, установите флажок Включить отладку машинного кода, а затем закройте страницу свойств, чтобы сохранить изменения.

    Включить отладку в смешанном режиме

  3. Если вы используете библиотеку DLL x64 из приложения .NET Framework, измените целевой объект платформы с любой ЦП на x64. Для этого может потребоваться выбрать Configuration Manager в раскрывающемся списке платформы решения для панели инструментов отладки. Затем, если вы не можете напрямую перейти на x64, создайте новую конфигурацию, которая предназначена для x64.

Установка точки останова и запуск отладки

  1. В проекте C# откройте Program.cs. Установите точку останова в следующей строке кода, щелкнув поле в левом углу, выбрав строку и нажав клавишу F9или щелкнув правой кнопкой мыши строку и выбрав точку останова >Вставить точку останова.

    int result = Multiply(7, 7);
    

    Красный круг отображается в левом поле, где устанавливается точка останова.

  2. Нажмите F5, щелкните зеленую стрелку на панели инструментов Visual Studio или выберите Отладка>начать отладку.

    Отладчик приостанавливается в заданной точке останова. Желтая стрелка указывает, где отладчик в настоящее время приостановлен.

Вход и выход из нативного кода

  1. При приостановке отладки в управляемом приложении нажмите клавишу F11или выберите Отладка>Шаг внутрь.

    Откроется собственный файл заголовка Mixed_Mode.h, и отображается желтая стрелка, в которой отладчик приостановлен.

    переход на нативный код

    переход на нативный код

  2. Теперь можно задавать точки останова, останавливать выполнение по ним и проверять переменные в нативном или управляемом коде.

    • Наведите указатель мыши на переменные в исходном коде, чтобы увидеть их значения.

    • Просмотрите переменные и их значения в окнах Авто и Локальные.

    • При приостановке отладчика можно также использовать окна наблюдения и окно стека вызовов.

  3. Нажмите F11 еще раз, чтобы продвинуться в отладчике на одну строку.

  4. Нажмите Shift+F11 или выберите Отладка>Шаг Выйти, чтобы продолжить выполнение и снова приостановить выполнение в управляемом приложении.

  5. Нажмите F5 или щелкните зеленую стрелку, чтобы продолжить отладку приложения.

Поздравляю! Вы завершили руководство по отладке в смешанном режиме.

Следующий шаг

В этом руководстве вы узнали, как отлаживать машинный код из управляемого приложения, включив отладку в смешанном режиме. Общие сведения о других функциях отладчика см. в статье: