Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Visual Studio позволяет включить несколько типов отладчика в сеансе отладки, который называется отладкой в смешанном режиме. В этом руководстве описано, как выполнять отладку управляемого и машинного кода в одном сеансе отладки.
В этом руководстве показано, как отлаживать нативный код из управляемого приложения, но можно также отладить управляемый код из нативного приложения. Отладчик также поддерживает другие типы отладки в смешанном режиме, такие как отладка Python и машинного кода, а также использование отладчика скрипта в типах приложений, таких как ASP.NET.
В этом руководстве описано следующее:
- Создайте простую нативную DLL.
- Создание простого приложения .NET Core или .NET Framework для вызова библиотеки DLL
- Настройка отладки в смешанном режиме
- Запуск отладчика
- Достигнута точка останова в управляемом приложении
- Шаг в нативный код
Необходимые условия
Необходимо установить Visual Studio со следующими рабочими нагрузками:
- Разработка настольных приложений с помощью C++
- разработка настольных приложений .NET
Если у вас нет 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 и щелкните значок Свойства, или щелкните правой кнопкой мыши элемент проекта и выберите Свойства.
В верхней части области свойств убедитесь, что параметр Configuration установлен как Active(Debug), а Platform совпадает с тем, что задано на панели инструментов: x64, или Win32 для платформы x86.
Важный
Если вы переключаете платформу с x86 на x64 или наоборот, необходимо перенастроить свойства для новой платформы.
В разделе Свойства конфигурации в левой области выберите Компоновщик>Дополнительнои в раскрывающемся списке рядом с Нет точки входавыберите Нет. Если вы должны изменить его на Нет, выберите Применить.
В разделе Свойства конфигурациивыберите Общиеи в раскрывающемся списке рядом с Тип конфигурациивыберите Динамическая библиотека (.dll). Выберите Применить, а затем выберите ОК.
Выберите проект в обозревателе решений , а затем выберите Сборка>решение сборки, нажмите клавишу F7или щелкните проект правой кнопкой мыши и выберите Сборка.
Проект должен создаваться без ошибок.
Создание простого управляемого приложения для вызова библиотеки DLL
Откройте Visual Studio и создайте проект.
Нажмите клавишу Esc, чтобы закрыть начальное окно. Введите CTRL+Q , чтобы открыть поле поиска, введите консоль и выберите консольное приложение C# для .NET или .NET Framework.
Затем введите имя, например Mixed_Mode_Calling_App, и нажмите кнопку Далее или Создать, независимо от того, какой вариант доступен.
Для .NET Core или .NET 5+выберите рекомендуемую целевую платформу или .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 или щелкните зеленую стрелку, чтобы продолжить отладку приложения.
Поздравляю! Вы завершили руководство по отладке в смешанном режиме.
Следующий шаг
В этом руководстве вы узнали, как отлаживать машинный код из управляемого приложения, включив отладку в смешанном режиме. Общие сведения о других функциях отладчика см. в статье: