Отладка – неотъемлемый этап цикла разработки приложений, зачастую более важный, чем написание кода. Именно отладка позволяет устранить проблемные места в коде, которые приводят к разного рода ошибкам. В этой статье речь пойдет о том, как отлаживать приложения в среде Visual Studio и какие механизмы её облегчают. Предполагается, что читатель в общих чертах уже знаком что из себя представляет процесс отладки. Все примеры воспроизведены в Visual Studio 2008, но актуальны для любой версии.
Любой алгоритм выполняется последовательно, одна инструкция за другой. Точка остановки позволяет приостановить выполнение кода на определенной инструкции. Это необходимо, чтобы начать отладку с предположительно проблемного участка. Например, при модульной структуре проекта проблемы начались при подключении нового модуля. Незачем отлаживать весь проект, когда можно отладить только модуль. Точки остановки сильно облегчают процесс в этом случае. Для того, чтобы установить точку остановки необходимо кликнуть на небольшую область, выделенную как правило особым цветом, в левой части редактора кода. Также это можно сделать, установив каретку на нужную строку и нажав F9.
При установке точки останова в окне редактора кода будет выведена иконка напротив строки кода.
Клик левой кнопкой мыши по иконке приведет к удалению точки остановки, а для управления необходимо открыть контекстное меню (клик правой кнопкой).
Среди доступных действий также можно отключить и удалить все точки остановки. Те же действия возможно выполнить из вкладки Debug, либо по нажатию соответствующих горячих клавиш.
Запуск отладчика происходит при запуске проекта в среде разработки. При наличии установленных точек останова, выполнение прервется на первой из них автоматически. Важно понимать, что отладчик будет останавливать выполнение модуля напротив каждой активной точки остановки. Подробнее поговорим о том, какая информация может быть доступна во время отладки. Прежде всего, информация эта четко структурирована и выводится в отдельных окнах.
Посмотреть вывод всей возможной информации можно во вкладке Debug->Window.
Breakpoints – информация обо всех точках остановки в отлаживаемом проекте.
Output – окно вывода Visual Studio. Используется для вывода служебных сообщений при работе со средой.
Watch – список наблюдаемых переменных. Переменные для наблюдения вносятся в список вручную и находятся там всегда, пока их не удалит разработчик.
Autos – переменные, с которыми идет работа в данный момент. Т.е. актуальные на момент исполнения кода переменные и их значения.
Locals – вывод локальных переменных и их значений.
Immediate – поиск и вывод значения переменной по символьному представлению. В отличие от Watch, не хранит список значений, а выводит значение по требованию.
Call Stack – стек вызовов. Показывает последовательность вызовов функций для отлаживаемого модуля до точки остановки.
Threads – вывод информации обо всех запущенных потоках отлаживаемого модуля. Из этого окна возможна работа с потоками через контекстное меню: остановка потоков, переход к исходному коду потока и т.д.
Modules – список загруженных модулей, необходимых для работы отлаживаемого (которые он подгружает для работы).
Processes – список процессов отлаживаемого модуля.
Memory – просмотр памяти отлаживаемого модуля в традиционном для любого hex-редактора виде.
Disassembly – просмотр ассемблерного листинга для отлаживаемого модуля. Очень хорошая возможность прямо из среды разработки посмотреть, как в итоге выглядит код на высокоуровневом языке.
Registers – вывод значений в регистрах
Информация в большинстве окон обновляется для каждой инструкции. Т.е. отладчик регистрирует и изменяет значения на новые. При этом измененные значения помечаются красным цветом.
Окно Watch поддерживает так называемые псевдопеременные. Своего рода макросы для определенных значений. Например, для вывода результата GetLastError после каждой строчки кода. Подробнее об этом можно прочитать здесь. Также Watch выполняет арифметические операции с переменными, а дляmanaged-кода может выполнять код.
Для того чтобы начать процесс отладки, необходимо поставить точку остановки в нужном месте и запустить модуль. Отладка станет доступна по достижению точки остановки. Также можно принудительно остановить выполнение модуля, в таком случае курсор автоматически переместится на код, который выполнялся до остановки. Но точка остановки при этом не установится.
Во время отладки в панели инструментов Visual Studio доступен Debug Toolbar. Если его нет, включить его можно, отметив элемент меню Debug во вкладке View->Toolbars.
Все кнопки в панели инструментов повторяют вкладку Debug, нас в данный момент интересует навигация по отлаживаемому коду. В качестве примера рассмотрим следующую ситуацию:
Во время пошаговой отладки важно также знать, что курсор можно передвинуть на необходимую строчку кода (Drag&Drop). Т.е. при желании заново отладить алгоритм не нужно перезапускать процесс отладки. Правда следует понимать, что в этом случае ожидаемое поведение программы не гарантировано. Разработчик должен отдавать отчет своим действиям. Например, в случае ниже программист получит ошибку, если передвинет курсор на строку 9, т.к. память для с еще не была выделена.
Процесс отладки в Visual Studio является одним из самых простых, если сравнивать с другими IDE. В статье были рассмотрены общие средства отладки для различных технологий. Тем не менее, в зависимости от типа проекта, средства для отладки могут дополняться. Например, при отладке GPU-кода. Да и возможности по отладке пошли далеко вперед после Visual Studio 2008 в сторону упрощения. Быть в курсе последних событий поможет тематический раздел в MSDN.
Чтобы взломать сеть Wi-Fi с помощью Kali Linux, вам нужна беспроводная карта, поддерживающая режим мониторинга…
Работа с консолью считается более эффективной, чем работа с графическим интерфейсом по нескольким причинам.Во-первых, ввод…
Конечно, вы также можете приобрести подписку на соответствующую услугу, но наличие SSH-доступа к компьютеру с…
С тех пор как ChatGPT вышел на арену, возросла потребность в поддержке чата на базе…
Если вы когда-нибудь окажетесь в ситуации, когда вам нужно взглянуть на спектр беспроводной связи, будь…
Elastic Security стремится превзойти противников в инновациях и обеспечить защиту от новейших технологий злоумышленников. В…