Руководство. Отладка 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:
Откройте Visual Studio и создайте проект.
Нажмите клавишу Esc, чтобы закрыть начальное окно. Введите CTRL+ Q, чтобы открыть поле поиска, введите пустой проект, выберите Шаблоны, а затем выберите Пустой проект для C++. В появившемся диалоговом окне выберите Создать. Затем введите имя, например Mixed_Mode_Debugging, и нажмите Создать.
Если вы не видите шаблон проекта пустого проекта, перейдите в раздел Инструменты>Получить инструменты и компоненты..., который открывает Visual Studio Installer. Установщик Visual Studio запускается. Выберите рабочую нагрузку Разработка настольных приложений на C++, а затем выберите Изменить.
Visual Studio создает проект.
В обозревателе решений выберите Исходные файлы, а затем выберите Проект>Добавление нового элемента. Или щелкните правой кнопкой мыши Исходные файлы и выберите Добавить>Новый элемент.
Если вы не видите все шаблоны элементов, выберите Показать все шаблоны.
В диалоговом окне новый элемент выберите файл 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. Если вызывающее приложение будет .NET Core, которое всегда работает в 64-разрядном режиме, выберите x64 в качестве платформы.
В Проводнике решенийвыберите элемент проекта Mixed_Mode_Debugging и щелкните значок Свойства, или щелкните правой кнопкой мыши элемент проекта и выберите Свойства.
В верхней части области свойств убедитесь, что конфигурации задано значение Active(Debug), платформы совпадает с тем, что задано на панели инструментов: x64или Win32 для платформы x86.
Важный
Если вы переключаете платформу с x86 на x64 или наоборот, необходимо перенастроить свойства для новой платформы.
В разделе Свойства конфигурации в левой области выберите Компоновщик>Дополнительнои в раскрывающемся списке рядом с Нет точки входавыберите Нет. Если вы должны изменить его на Нет, выберите Применить.
В разделе Свойства конфигурациивыберите Общиеи в раскрывающемся списке рядом с Тип конфигурациивыберите Динамическая библиотека (.dll). Выберите Применить, а затем выберите ОК.
Выберите проект в обозревателе решений , а затем выберите Сборка>решение сборки, нажмите клавишу F7или щелкните проект правой кнопкой мыши и выберите Сборка.
Проект должен создаваться без ошибок.
Создание простого управляемого приложения для вызова библиотеки DLL
Откройте 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 создает пустой проект и отображает его в обозревателе решений.
Замените весь код в 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
Выберите Отладка в левой области, выберите Открыть интерфейс профилей отладки, затем установите флажок Включить отладку нативного кода, а затем закройте страницу свойств, чтобы сохранить изменения.
код .NET Framework
В меню слева выберите Отладка. Затем в разделе обработчиков отладчика выберите свойство Включить отладку машинного кода, а затем закройте страницу свойств, чтобы сохранить изменения.
Установите флажок Отладка в левой области, установите флажок Включить отладку машинного кода, а затем закройте страницу свойств, чтобы сохранить изменения.
Если вы используете библиотеку DLL x64 из приложения .NET Framework, измените целевой объект платформы с любой ЦП на x64. Для этого может потребоваться выбрать Configuration Manager в раскрывающемся списке платформы решения для панели инструментов отладки. Затем, если вы не можете напрямую перейти на x64, создайте новую конфигурацию, которая предназначена для x64.
Установка точки останова и запуск отладки
В проекте C# откройте Program.cs. Установите точку останова в следующей строке кода, щелкнув поле в левом углу, выбрав строку и нажав клавишу F9или щелкнув правой кнопкой мыши строку и выбрав точку останова >Вставить точку останова.
int result = Multiply(7, 7);
Красный круг отображается в левом поле, где устанавливается точка останова.
Нажмите F5, щелкните зеленую стрелку на панели инструментов Visual Studio или выберите Отладка>начать отладку.
Отладчик приостанавливается в заданной точке останова. Желтая стрелка указывает, где отладчик в настоящее время приостановлен.
Вход и выход из нативного кода
При приостановке отладки в управляемом приложении нажмите клавишу F11или выберите Отладка>Шаг внутрь.
Откроется собственный файл заголовка Mixed_Mode.h, и отображается желтая стрелка, в которой отладчик приостановлен.
Теперь можно задавать точки останова, останавливать выполнение по ним и проверять переменные в нативном или управляемом коде.
Наведите указатель мыши на переменные в исходном коде, чтобы увидеть их значения.
Просмотрите переменные и их значения в окнах Авто и Локальные.
При приостановке отладчика можно также использовать окна наблюдения и окно стека вызовов.
Нажмите F11 еще раз, чтобы продвинуться в отладчике на одну строку.
Нажмите Shift+F11 или выберите Отладка>Шаг Выйти, чтобы продолжить выполнение и снова приостановить выполнение в управляемом приложении.
Нажмите F5 или щелкните зеленую стрелку, чтобы продолжить отладку приложения.
Поздравляю! Вы завершили руководство по отладке в смешанном режиме.
Следующий шаг
В этом руководстве вы узнали, как отлаживать машинный код из управляемого приложения, включив отладку в смешанном режиме. Общие сведения о других функциях отладчика см. в статье: