Как из консольного приложения сделать оконное c

Обновлено: 25.04.2024

В этом пошаговом руководстве показано, как создать традиционное классическое приложение Windows в Visual Studio. В примере приложения, которое вы создадите, используется API Windows для отображения "Hello, Windows desktop!" в окне. Код, созданный в этом пошаговом руководстве, можно использовать в качестве шаблона для создания других классических приложений Windows.

Для краткости некоторые операторы кода опущены в тексте. В разделе "Сборка кода" в конце этого документа показан полный код.

Предварительные требования

Компьютер под управлением Microsoft Windows 7 или более поздних версий. Мы рекомендуем Windows 10 или более поздней версии для оптимальной разработки.

Копия Visual Studio. Сведения о скачивании и установке Visual Studio см. в этой статье. Когда вы запускаете установщик, убедитесь, что установлена рабочая нагрузка Разработка классических приложений на C++ . Не беспокойтесь, если вы не установили эту рабочую нагрузку при установке Visual Studio. Вы можете снова запустить установщик и установить ее сейчас.

Detail of the Desktop development with C++ workload in the Visual Studio Installer.

Базовые значения об использовании интегрированной среды разработки Visual Studio. Если вы уже использовали классические приложения для Windows, вы, вероятно, справитесь. Общие сведения см. в обзоре возможностей интегрированной среды разработки Visual Studio.

Основные навыки владения языком C++. Не волнуйтесь, мы не будем делать ничего сложного.

Создание классического проекта Windows

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

Создание классического проекта Windows в Visual Studio

В главном меню выберите Файл >Создать >Проект, чтобы открыть диалоговое окно Создание проекта.

В верхней части диалогового окна задайте языкC++, задайте для платформызначение Windows и задайте для Project тип "Рабочий стол".

В отфильтрованный список типов проектов выберите Windows мастер рабочего стола и нажмите кнопку "Далее". На следующей странице введите имя проекта, например DesktopApp.

В Обозреватель решений щелкните правой кнопкой мыши проект DesktopApp, выберите "Добавить" и выберите "Создать элемент".

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

Screenshot of the Add New Item dialog box in Visual Studio 2019 with Installed ></p>
<p> Visual C plus plus selected and the C plus plus File option highlighted.

Теперь проект создан, и исходный файл откроется в редакторе. Чтобы продолжить, перейдите к созданию кода.

Создание классического проекта Windows в Visual Studio 2017 г.

В меню Файл выберите команду Создать, а затем пункт Проект.

В диалоговом окне "Создать Project" в области слева разверните узел InstalledVisual>C++, а затем выберите Windows Desktop. В средней области выберите мастер Windows рабочего стола.

Screenshot of the New Project dialog box in Visual Studio 2017 with Installed ></p>
<p> Visual C plus plus > Windows Desktop selected, the Windows Desktop Wizard option highlighted, and DesktopApp typed in the Name text box.

В Обозреватель решений щелкните правой кнопкой мыши проект DesktopApp, выберите "Добавить" и выберите "Создать элемент".

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

Screenshot of the Add New Item dialog box in Visual Studio 2017 with Installed ></p>
<p> Visual C plus plus selected and the C plus plus File option highlighted.

Теперь проект создан, и исходный файл откроется в редакторе. Чтобы продолжить, перейдите к созданию кода.

Создание классического проекта Windows в Visual Studio 2015 г.

В меню Файл выберите команду Создать, а затем пункт Проект.

В диалоговом окне "Создать Project" в области слева разверните узел InstalledTemplatesVisual> >C++, а затем выберите Win32. В средней области выберите шаблон Проект Win32.

Screenshot of the New Project dialog box in Visual Studio 2015 with Installed ></p>
<p> Templates > Visual C plus plus > Win32 selected, the Win32 Project option highlighted, and DesktopApp typed in the Name text box.

На странице "Обзор " мастера приложений Win32 нажмите кнопку "Далее".

Create DesktopApp in Win32 Application Wizard Overview page.

На странице "Приложение Параметры" в разделе "Тип приложения" выберите Windows приложение. В разделе "Дополнительные параметры" снимите флажок предварительно скомпилированного заголовка, а затем выберите " Пустой проект". Чтобы создать проект, нажмите кнопку Готово.

В Обозреватель решений щелкните правой кнопкой мыши проект DesktopApp, выберите "Добавить" и выберите "Создать элемент".

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

Screenshot of the Add New Item dialog box in Visual Studio 2015 with Installed ></p>
<p> Visual C plus plus selected and the C plus plus File option highlighted.

Теперь проект создан, и исходный файл откроется в редакторе.

Создание кода

Далее вы узнаете, как создать код для классического приложения Windows в Visual Studio.

Запуск классического приложения Windows

Так же, как каждое приложение C и приложение C++ должны иметь функцию в качестве отправной main точки, каждое Windows классическое приложение должно иметь WinMain функцию. WinMain имеет следующий синтаксис:

Сведения о параметрах и возвращаемых значениях этой функции см. в разделе "Точка входа WinMain".

Что такое все эти дополнительные слова, такие как WINAPI , или CALLBACK , или, или HINSTANCE , или _In_ ? Традиционный API Windows использует методы typedefs и макросы препроцессора для абстрагирования некоторых подробностей типов и кода для конкретной платформы, таких как соглашения о вызовах, __declspec объявления и прагмы компилятора. В Visual Studio можно использовать функцию быстрой информации IntelliSense, чтобы узнать, что определяют эти определения типов и макросов. Наведите указатель мыши на интересующее слово или нажмите клавиши CTRLK, CTRLI++ для небольшого всплывающего окна, содержащего определение. Дополнительные сведения см. в разделе Using IntelliSense. Параметры и типы возвращаемых значений часто используют заметки SAL для перехвата ошибок программирования. Дополнительные сведения см. в статье "Использование заметок SAL для уменьшения дефектов кода C/C++".

Windows требуются классические программы. TCHAR определяет макрос, который разрешается в конечном счете wchar_t , если символ ЮНИКОД определен в проекте, в противном случае он разрешается в char . Если вы всегда создаете сборку с поддержкой ЮНИКОДа, вам не требуется TCHAR и может использоваться напрямую wchar_t .

Наряду с функцией WinMain каждый Windows классическое приложение также должно иметь функцию window-procedure. Обычно эта функция называется WndProc , но ее можно присвоить любое имя. WndProc имеет следующий синтаксис:

Дополнительные сведения см. в разделе Процедуры окна.

Добавление функциональных возможностей в функцию WinMain

WinMain В функции вы заполняете структуру типа WNDCLASSEX. Структура содержит сведения о окне: значок приложения, цвет фона окна, имя, отображаемое в заголовке строки, помимо прочего. Важно отметить, что он содержит указатель функции на процедуру окна. В приведенном ниже примере показана типичная структура WNDCLASSEX .

Сведения о полях приведенной выше структуры см. в разделе WNDCLASSEX.

Теперь можно создать окно. Используйте функцию CreateWindowEx .

Эта функция возвращает HWND дескриптор окна. Дескриптор немного похож на указатель, который Windows используется для отслеживания открытых окон. Дополнительные сведения см. в разделе Типы данных Windows.

На этом этапе окно было создано, но нам все равно нужно сообщить Windows, чтобы сделать его видимым. Вот что делает этот код:

На этом этапе функция WinMain должна напоминать приведенный ниже код.

Добавление функциональных возможностей в функцию WndProc

HDC в коде — это дескриптор контекста устройства, который используется для рисования в клиентской области окна. Используйте функции для EndPaint подготовки BeginPaint и завершения рисования в клиентской области. BeginPaint возвращает дескриптор контексту устройства отображения, используемому для рисования в клиентской области; EndPaint завершает запрос на рисование и освобождает контекст устройства.

Сборка кода

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

Сборка примера

Удалите любой код, введенный в HelloWindowsDesktop.cpp в редакторе. Скопируйте этот пример кода и вставьте его в HelloWindowsDesktop.cpp:

В меню Построение выберите Построить решение. Результаты компиляции должны отображаться в окне вывода в Visual Studio.

Чтобы запустить приложение, нажмите клавишу F5. Окно, содержащее текст "Hello, Windows desktop!", должно появиться в левом верхнем углу экрана.

Screenshot of the running DesktopApp Project.

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

Закрыт. На этот вопрос невозможно дать объективный ответ. Ответы на него в данный момент не принимаются.

Хотите улучшить этот вопрос? Переформулируйте вопрос так, чтобы на него можно было дать ответ, основанный на фактах и цитатах.

Закрыт 5 лет назад .

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

Попробуйте Qt, это не winapi, возможно вам подойдет

Если на C++ если кроссплатформенные фреймворки: посмотрите на Qt, wxWidget (я как раз сейчас немного изучаю этот фреймворк), GTK+.

Может хватит уже советовать WinForms?:) Есть же WPF, который пропагандирует намного более "правильный" подход к построению гуя. WinForms же фактически является оберткой над WinAPI

WinForms просто значительно проще WPF. Для обучения пойдет. Хотя лучше сразу учиться правильным вещам.

WinForms значительно хуже WPF в том, что (1) на нём тяжело писать приложения с нормальной архитектурой, (2) в нём много специфических для WinAPI-программирования деталей, учить которые нормальному программисту нафиг не упало, особенно в свете уже пришедшего к нам WinRT. Лучше начинать сразу с концептуально чистого WPF.

Или сразу смотреть в сторону WinRT, несмотря на всё то, чем его поливают, API довольно чист и красив, нет тяжелого наследия и костылей обратной совместимости, как в WPF или WinAPI

Недавно наткнулся на эту страничку, все описано довольно доступным языком: Основы программирования для Win32 API

Попробуйте библиотеки: Qt или GTK+

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

Если речь о WinAPI, то по своему опыту, могу сказать - функции и правда по началу кажутся очень страшнми, но все начинается, как ни странно с классов и велосипедов, о которых ни кто не говорит, ибо стесняются, но все поголовно пишут. ))

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

Некоторые пишут подсматривая в готовые фреймворки, типа MFC, WTL, я подсматривал тогда в Delphi.

Для облегчения жизни, советую брать курс на интегрированную работу с каким-нибудь готовым набором примитивов, типа STL и в обязательном порядке научиться работать в MSDN

После длительного изучения и практики C++, я хочу перейти к чему-то более серьезному. А конкретно писать графические приложения с пользовательским интерфейсом, ну хотя бы банально уметь "создавать окно", вместо работы с консолью. (простыми словами - как мне начать использовать GUI?)

С чего мне начать и какие библиотеки изучать? Может быть есть какие-то книги или курсы с лекциями о которых я не знаю. Честно, я пробовал искать на различных языках, но не нашел ничего стоящего кроме как фреймворка Qt, но хочу обойтись пока что без него. (Если это возможно, потому что вскоре я хочу специализироваться на создании игр) Возможно мне стоит изучить windows.h

Буду очень благодарен любым вашим советам, рекомендациям или ресурсам.

  • Вопрос задан более трёх лет назад
  • 954 просмотра

sfi0zy

Создавать GUI с помощью WinAPI - это, конечно, очень полезно с точки зрения своего развития, но. сейчас мало кто этим занимается. Есть Qt, есть GTK, есть <вставьте свое название>, которые заметно упрощают разработку пользовательских интерфейсов. Если вам будет необходимо создавать сложные интерфейсы (вспомните MS Office или Adobe Photoshop) - стоит выбрать что-то из этого и использовать, но в случае с разработкой игр ситуация немного другая: в играх интерфейс такого рода обычно не нужен. Вообще. Там обычно только одно "главное меню" и немножко элементов интерфейса, которые мало похожи на то, что вы видите в среднестатистическом приложении. Поэтому (личное мнение) если вы хотите заниматься разработкой игр, вам стоит изучать то, что в них более востребовано - например SDL. И сразу читать что-то вроде SDL Game Development и писать. Через некоторое время будете делать 2D-игры без проблем (со звуком, спрайтами, клавиатурой/мышью/джойстиком, нормальными уровнями, и.т.д.) и, заодно, поймете принципы создания архитектуры подобного рода проектов. А потом смотреть в сторону каких-либо физических движков или углубляться в графику (OpenGL/DirectX).

Создание проекта Visual Studio


Для создания нового консольного приложения запускаем Microsoft Visual Studio 2010 Express и переходим в меню Файл->Создать->Проект

В появившемся окне выбираем Консольное приложение Win32 и задаем имя проекта и нажимаем кнопку OK.

В появившемся окне нажимаем кнопку Далее.

В следующем окне отмечаем галочку Дополнительные параметры: Пустой проект и нажимаем кнопку Далее.

В левой части появившегося окна отображается Обозреватель решений. Для добавления нового файла программы в проект выбираем по правой кнопке мыши на папке Файлы исходного кода меню Добавить->Создать элемент.

Создание элемента проекта


В появившемся окне выбираем Файл C++ (.cpp), задаем имя файла и нажимаем кнопку Добавить.

Имя файла исходного кода


В появившемся окне набираем текст программы. В качестве примера можно использовать текст программы «Здравствуй, мир!» из раздела Структура программы на языке Си

Пример программы


Для компиляции программы выбираем меню Отладка->Построить решение.

Построение решения


В случае успешного построения в нижней части окна отображается Построение: успешно 1.

Построение успешно


Для запуска приложения выбираем меню Отладка->Начать отладку.


Результат выполнения программы:

Свойства проекта

Для корректного отображения русских символов в левом верхнем углу консоли по нажатию правой кнопки мыши выбираем меню Свойства.

В появившемся окне выбрать шрифт, поддерживающий русскую кодировку для кодовой страницы 1251, например Lucida Console.


В результате получаем читаемый русский шрифт.

При желании можно изменить другие параметры окна консоли.

Изучив это руководство, вы:

  • Добавите второй проект.
  • Ссылка на библиотеки и добавление пакетов
  • Выполните дополнительную отладку.
  • Проверите готовый код.

Предварительные условия

Для работы с этой статьей можно использовать любое из следующих приложений калькулятора.

Добавление еще одного проекта

Реальный код связан с проектами, которые объединены в решение. Вы можете добавить проект библиотеки классов в приложение калькулятора, предоставляющее некоторые функции калькулятора.

В Visual Studio выберите Файл > Добавить > Новый проект, чтобы добавить новый проект. В Обозревателе решений щелкните решение правой кнопкой мыши, чтобы добавить проект из контекстного меню.

В Обозревателе решений щелкните узел решения правой кнопкой мыши и выберите пункты Добавить > Новый проект.

Снимок экрана: выбор шаблона проекта

В диалоговом окне Настройка нового проекта введите имя проекта CalculatorLibrary и нажмите кнопку Далее.

Снимок экрана: обозреватель решений с добавленным проектом библиотеки классов CalculatorLibrary

Переименуйте файл Class1.cs в CalculatorLibrary.cs. Чтобы переименовать файл, щелкните правой кнопкой мыши имя в Обозревателе решений и выберите команду Переименовать, затем выберите имя и нажмите клавишу F2 либо выберите имя и щелкните еще раз, чтобы ввести его.

Теперь необходимо добавить ссылку на проект, чтобы первый проект мог использовать API, предоставляемые новой библиотекой классов. Правой кнопкой мыши щелкните узел Зависимости в проекте Калькулятор и выберите Добавить ссылку на проект.

Снимок экрана: пункт меню

Откроется диалоговое окно Диспетчер ссылок. Это диалоговое окно позволяет добавлять ссылки на другие проекты, а также сборки и библиотеки DLL COM, необходимые вашим проектам.

В диалоговом окне Диспетчер ссылок установите флажок для проекта CalculatorLibrary и выберите OK.

Снимок экрана: диалоговое окно

Ссылка на проект отображается в узле Проекты в обозревателе решений.

Снимок экрана: Обозреватель решений со ссылкой на проект

В файле Program.cs выберите класс Calculator и весь его код и нажмите CTRL+X, чтобы вырезать его. Затем в CalculatorLibrary.cs вставьте код в пространство имен CalculatorLibrary .

Добавьте public до класса калькулятора, чтобы предоставить его за пределами библиотеки.

Теперь код в CalculatorLibrary.cs должен выглядеть следующим образом.

Или попробуйте добавить директиву using в начало файла.

Добавление директивы using позволяет удалить пространство имен CalculatorLibrary из места вызова, но это приводит к неоднозначности. Является ли Calculator классом в CalculatorLibrary или Calculator — это пространство имен?

Чтобы устранить неоднозначность, измените имя пространства имен Calculator на CalculatorProgram в файле Program.cs.

В Обозревателе решений щелкните узел решения правой кнопкой мыши и выберите пункты Добавить > Новый проект.

Снимок экрана: выбор шаблона проекта

В диалоговом окне Настройка нового проекта введите имя проекта CalculatorLibrary и нажмите кнопку Далее.

Visual Studio создаст новый проект и добавит его в решение.

Снимок экрана: обозреватель решений с добавленным проектом библиотеки классов CalculatorLibrary

Переименуйте файл Class1.cs в CalculatorLibrary.cs. Чтобы переименовать файл, щелкните правой кнопкой мыши имя в Обозревателе решений и выберите команду Переименовать, затем выберите имя и нажмите клавишу F2 либо выберите имя и щелкните еще раз, чтобы ввести его.

Теперь необходимо добавить ссылку на проект, чтобы первый проект мог использовать API, предоставляемые новой библиотекой классов. Правой кнопкой мыши щелкните узел Зависимости в проекте Калькулятор и выберите Добавить ссылку на проект.

Снимок экрана: пункт меню

Откроется диалоговое окно Диспетчер ссылок. Это диалоговое окно позволяет добавлять ссылки на другие проекты, а также сборки и библиотеки DLL COM, необходимые вашим проектам.

В диалоговом окне Диспетчер ссылок установите флажок для проекта CalculatorLibrary и выберите OK.

Снимок экрана: диалоговое окно

Ссылка на проект отображается в узле Проекты в обозревателе решений.

Снимок экрана: Обозреватель решений со ссылкой на проект

В файле Program.cs выберите класс Calculator и весь его код и нажмите CTRL+X, чтобы вырезать его. Затем в CalculatorLibrary.cs вставьте код в пространство имен CalculatorLibrary .

Добавьте public до класса калькулятора, чтобы предоставить его за пределами библиотеки.

Теперь код в CalculatorLibrary.cs должен выглядеть следующим образом.

Или попробуйте добавить директиву using в начало файла.

Добавление директивы using позволяет удалить пространство имен CalculatorLibrary из места вызова, но это приводит к неоднозначности. Является ли Calculator классом в CalculatorLibrary или Calculator — это пространство имен?

Чтобы устранить неоднозначность, переименуйте пространство имен из Calculator в CalculatorProgram в Program.cs и в CalculatorLibrary.cs.

Начните с добавления директив using в начало файла CalculatorLibrary.cs.

Это использование класса Trace должно подразумевать ссылку на класс, который он связывает с файловым потоком. Это требование означает, что калькулятор будет работать лучше в качестве объекта, поэтому добавьте конструктор в начало класса Calculator в CalculatorLibrary.cs.

Также удалите ключевое слово static , чтобы изменить статический метод DoOperation на метод-член.

Добавьте выходные данные журнала для каждого вычисления. DoOperation будет иметь следующий вид.

Также измените место вызова DoOperation , чтобы оно ссылалось на объект с именем calculator в нижнем регистре. Теперь код является вызовом члена, а не вызовом статического метода.

Снова запустите приложение. Когда все будет готово, щелкните правой кнопкой мыши узел проекта Калькулятор и выберите Открыть папку в проводнике.

В проводнике перейдите в папку выходных данных в разделе bin/Debug/ и откройте файл calculator.log. Результат должен выглядеть следующим образом.

Сейчас файл CalculatorLibrary.cs должен выглядеть следующим образом.

Файл Program.cs должен выглядеть как следующий фрагмент кода.

Добавление пакета NuGet: запись в JSON-файл

В Обозревателе решений щелкните правой кнопкой мыши узел Зависимости для проекта CalculatorLibrary и выберите Управление пакетами NuGet.

Снимок экрана:

Снимок экрана:

Откроется диспетчер пакетов NuGet.

Снимок экрана: диспетчер пакетов NuGet

Найдите и выберите пакет Newtonsoft.Json и нажмите кнопку Установить.

Снимок экрана: сведения о пакете NuGet Newtonsoft.Json в диспетчере пакетов NuGet

Visual Studio скачивает пакет и добавляет его в проект. Новая запись отображается в узле "Ссылки" в Обозревателе решений.

Снимок экрана: сведения о пакете NuGet Newtonsoft.Json в диспетчере пакетов NuGet

Если появится запрос на принятие изменений, нажмите кнопку OK.

Visual Studio скачивает пакет и добавляет его в проект. Новая запись отображается в узле Пакеты в Обозревателе решений.

Добавьте директиву using для Newtonsoft.Json в начало файла CalculatorLibrary.cs.

Создайте объект члена JsonWriter и замените конструктор Calculator следующим кодом.

Измените метод DoOperation , чтобы добавить код JSON writer .

Добавьте метод для завершения синтаксиса JSON после ввода пользователем всех данных для операции.

В конце файла Program.cs перед return; добавьте вызов к Finish .

Выполните сборку приложения и запустите его. Попробуйте выполнить несколько операций и закройте приложение, используя команду n.

Откройте файл calculatorlog.json в проводнике. Выходные данные должны быть примерно следующими.

Отладка. Установка точки останова и попадание в нее

Отладчик Visual Studio — очень эффективное средство. Отладчик может пошагово пройти код, чтобы найти точку, в которой есть ошибка программирования. Затем можно понять, какие исправления необходимо внести, и внести временные изменения, чтобы можно было продолжить работу приложения.

В файле Program.cs щелкните поле слева от следующей строки кода. Можно также выбрать строку и нажать клавишу F9 или щелкнуть правой кнопкой мыши и выбрать Точка останова > Вставить точку останова.

Красная точка указывает на точку останова. Для приостановки приложения и проверки кода можно использовать точки останова. Вы можете установить точку останова в любой исполняемой строке кода.

Снимок экрана: установка точки останова

Выполните сборку и запуск приложения. Введите следующие значения для вычисления.

  • Для первого числа введите 8.
  • Для второго числа введите 0.
  • Давайте поэкспериментируем с оператором. Введите d.

Приложение приостанавливается в созданной точке останова, которая обозначается желтым указателем слева и выделенным кодом. Выделенный код еще не выполнен.

Снимок экрана: попадание в точку останова

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

Отладка. Просмотр переменных

В выделенном коде наведите указатель мыши на переменные, такие как cleanNum1 и op . Текущие значения этих переменных, 8 и d соответственно, отображаются в подсказках по данным.

Снимок экрана: подсказки по данным

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

В нижней области просмотрите окно Локальные. Если оно закрыто, выберите Отладка > Окна > Локальные, чтобы открыть его.

В окне Локальные отображаются все переменные, находящиеся в области, а также их значения и типы.

Снимок экрана: окно

Снимок экрана: окно

Взгляните на окно Видимые.

Окно "Видимые" аналогично окну Локальные, но отображает переменную непосредственно перед текущей строкой кода и после строки, в которой приостановлено приложение.

Далее можно поочередно выполнить код в отладчике по одной инструкции за раз. Это называется пошаговым выполнением.

Отладка. Пошаговое прохождение кода

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

С помощью команды "Выполнять по шагам" приложение выполняет текущий оператор и переходит к следующему исполняемому оператору. Как правило, это следующая строка кода. Желтый указатель слева всегда указывает на текущий оператор.

Снимок экрана: команда

Вы только что выполнили по шагам метод DoOperation в классе Calculator .

Чтобы получить иерархический обзор выполнения программы, просмотрите окно Стек вызовов. Если оно закрыто, выберите Отладка > Окна > Стек вызовов, чтобы открыть его.

Снимок экрана: стек вызовов

В этом представлении показан текущий метод Calculator.DoOperation , обозначенный желтым указателем. Во второй строке показана функция, которая вызвала метод из метода Main в Program.cs.

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

Нажмите клавишу F10 или выберите Отладка > Шаг с обходом несколько раз, пока приложение не остановится в операторе switch .

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

Нажмите клавишу F10 еще раз, чтобы приложение приостанавливалось на следующей строке кода.

Этот код проверяет деление на нуль. Если приложение продолжит работать, оно вызовет общее исключение (ошибку), но вы можете выполнить другое действие, например просмотреть фактическое возвращаемое значение в консоли. Один из вариантов — использовать функцию отладчика Изменить и продолжить, чтобы внести изменения в код и продолжить отладку. Тем не менее мы покажем другой метод для временного изменения потока выполнения.

Отладка. Тестирование временного изменения

Выберите желтый указатель, который в данный момент приостановлен на операторе if (num2 != 0) , и перетащите его в следующий оператор.

Если перевести указатель сюда, приложение полностью пропускает оператор if , чтобы вы могли увидеть, что происходит при делении на ноль.

Нажмите клавишу F10, чтобы выполнить строку кода.

Нажмите клавишу F5 или выберите Отладка > Продолжить отладку.

Символ бесконечности отображается в консоли как результат математической операции.

Закройте приложение должным образом с помощью команды n.

Полный код

Ниже приведен полный код для файла CalculatorLibrary.cs после выполнения всех шагов.

А вот код для файла Program.cs:

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

Поздравляем с завершением этого учебника! Для получения дополнительных сведений изучите следующие ресурсы.

Читайте также: