Теги: Отладка, бряк, брейкпоинт, шаг с обходом, шаг с заходом, шаг с выходом, условные точки останова, отладка на visual studio, отладка на борланде, отладка на embarcadero, отладка на code gear, watchlist.
Отладка программы
Ч асто бывают ситуации, когда код скомпилировался, но работает не так, как предполагалось. Обнаружить ошибку просмотром кода не удалось и логгирование не особо помогает. Тогда можно воспользоваться дебаггером, пошагово пройти программу (благо, они у вас совсем небольшие), проследить состояние переменных и ход выполнения приложения или дизассемблировать код.
Пусть у нас имеется следующий код
#include #include #include #include void printArray(int i, int j_max, int k_max) < int j, k; for (j = 1; j < j_max; j++) < for (k = 1; k < k_max; k++) < printf(«%4d», j*k*i); >printf(«n»); > > void main() < int i; int j; int k; for (i = 1; i < 4; i++) < printf(«———-n»); printArray(i, 6, 6); >_getch(); >
Необходимо научиться работать с отладчиком: пошагово проходить весь код, устанавливать точки останова программы, просматривать значения переменных во время работы.
Язык c++ с нуля | #42 Точки останова.
Visual Studio
В ыполните ОТЛАДКА | Шаг с обходом, или нажмите F10. Вы получите примерно такую картину, как на рисунке. Жёлтая стрелка указывает, какой оператор будет выполнен. Используя шаг с обходом (F10), шаг с заходом (F11) и шаг с выходом (Shift + F11) можно исполнять программу.
Вызов отладчика на Visual Studio Express
Шаг с обходом выполняет оператор, но не заходит в него. Например, если это вызов функции, то он будет произведён, но внутрь функции мы не попадём.
Шаг с заходом позволяет «зайти» в оператор, если он сложный. Например, перейти к функции, которая выполняется.
Шаг с выходом позволяет вернуться на уровень выше, если мы совершили шаг с заходом.
Окошко «Локальные» снизу показывает текущее значение локальных переменных. Во время захода в функцию в значениях хранится мусор.
Нажимая F10, дойдите до строки 23, где происходит вызов функции printArray. Если вы нажмёте F11, то перейдёт внутрь функции printArray.
Шаг с заходом позволяет перейти в функцию
Чтобы выйти из этой функции, можно нажать Shift + F11.
Если часть программы необходимо пропустить, то ставят точку останова (breakpoint, «бряк»). Для этого кликают по левому полю, рядом со строчкой, на которой необходимо остановиться, или нажимают F9. Останов можно осуществить только на операторе, нельзя остановиться, например, на определении переменной или пустой строке. В этом случае отладчик «скинет» точку останова до ближайшего валидного места.
Когда выполнение программы доходит до оператора, рядом с которым стоит breakpoint, то происходит останов
После того, как точка останова выставлена, можно нажать F5. Программа будет выполняться до тех пор, пока не встретит точку останова. Это особенно удобно, когда нужно обойти ввод данных.
Простейший пример использования отладчика в Visual Studio (C#)
Точка останова может иметь ряд условий, например, число попаданий, фильтры, действие, которое выполняется при остановке и т.д. Для того, чтобы задать дополнительные свойства, кликните правой кнопкой мыши на точке и в выпадающем меню выберете нужный пункт.
Останов выполнения программы может быть осуществлён по условию
Пусть, например, мы хотим остановить выполнение программы тогда, когда значение локальной переменной i внутри цикла в функции стало равно 2. Для этого напишем соответствующее условие
Теперь, если нажать на «Продолжить», то программа будет работать до тех пор, пока значение локальной переменной i внутри функции не станет равным 2.
Borland, Code Gear, Embarcadero etc.
В ыполните Run | Step over, или нажмите F8. Вы получите примерно такую картину, как на рисунке. Синяя стрелка указывает, какой оператор будет выполнен. Используя шаг с обходом (F8), шаг с заходом (F7) можно исполнять программу. Кроме этого, имеются дополнительные возможности, например исполнение кода до курсора (F4), исполнение до тех пор, пока не будет осуществлён возврат (Shift + F8), просматривать состояние переменных и выражений (Run | Inspect), изменять значение переменных (Ctrl + F7) и добавлять список отслеживаемых переменных и выражений (Ctrl + F5).
Вызов отладчика на Embarcadero RAD Studio XE2
Шаг с обходом выполняет оператор, но не заходит в него. Например, если это вызов функции, то он будет произведён, но внутрь функции мы не попадём.
Шаг с заходом позволяет «зайти» в оператор, если он сложный. Например, перейти к функции, которая выполняется.
Шаг с выходом позволяет вернуться на уровень выше, если мы совершили шаг с заходом.
Окошко «Local Variables» слева снизу отображает текущее значение локальных переменных. Во время захода в функцию в значениях хранится мусор.
Нажимая F8, дойдите до строки 23, где происходит вызов функции printArray. Если вы нажмёте F7, то перейдёт внутрь функции printArray.
Шаг с заходом позволяет перейти в функцию
Если часть программы необходимо пропустить, то ставят точку останова. Для этого кликают по левому полю, рядом со строчкой, на которой необходимо остановиться. Останов можно осуществить только на операторе, нельзя остановиться, например, на определении переменной или пустой строке. В этом случае отладчик отметит крестом нерабочую точку останова. Во время отладки все возможные точки останова выделены синим, если по ним кликнуть, то они становятся активными красными.
Синие метки — возможные точки останова, красные — активные
После того, как точка останова выставлена, можно нажать F9. Программа будет выполняться до тех пор, пока не встретит точку останова. Это особенно удобно, когда нужно обойти ввод данных.
Точка останова может быть иметь ряд условий, например, число попаданий, фильтры, действие, которое выполняется при остановке и т.д. Для того, чтобы задать дополнительные свойства, кликните правой кнопкой мыши на точке и в выпадающем меню выберете Breakpoint Properties….
Пусть, например, мы хотим остановить выполнение программы тогда, когда значение локальной переменной i внутри цикла в функции стало равно 2. Для этого напишем соответствующее условие в поле condition
Останов выполнения программы может быть осуществлён по условию
Теперь, если нажать на «Продолжить», то программа будет работать до тех пор, пока значение локальной переменной i внутри функции не станет равным 2.
Слева расположено окно Watchlist. Watchlist позволяет добавлять отслуживаемые переменные и выражения. Кликните два раза по полю и появится диалоговое окно. Пусть, например, мы хотим трассировать сумму переменных i и j. Запишем в watchlist сумму
Watchlist позволяет отслеживать значения переменных и выражений во время отладки
Всё ещё не понятно? – пиши вопросы на ящик
Источник: learnc.info
Горячие клавиши в Visual Studio
Сюда буду добавлять горячие клавиши в Visual Studio, способы быстрого ввода и прочие фишки, позволяющие кодить более комфортно.
Начнем с самого простого, что бывает нужно начинающему программисту:
cw + 2 раза Tab = Console.WriteLine();
Далее материалы статьи с Хабра, где-то с моими дополнениями, но в основном в чистом виде:
Комментирование
Ctrl+K,C — закомментировать выбранные линии в коде.
Ctrl+K,U — раскомментировать выбранные линии в коде.
Если перед именем метода набрать /// — автоматически будут добавлены XML комментарии, которые потом можно использовать для создания документации. Туда можно вписать название метода, описание переменных и т.п. Далее при использовании данного метода будут всплывать подсказки как раз с этой информацией.
Поиск
Ctrl+F — открывается стандартное окно поиска, если в буфер недавно было скопирован текст, то он автоматически подставиться.
Ctrl+F3 — поиск «активного» текста вниз (который выделен или слово на котором стоит курсор), без копирования в буфер обмена.
Ctrl+Shift+F3 — поиск «активного» текста вверх.
Ctrl+I — и начинаете печатать текст, этакий runtime поиск.
Вызов базового джина
Вам лень писать текст полностью?! Скорость выпадающего Intellisence не устраивает несущуюся впереди вас вашу мысль?!
Тогда самое время применить следующии комбинации:
Ctrl+Space — вызов Intellisence с показом «слов»
Ctrl+J — если вы подзабыли название метода класса или его свойсто, то эта комбинация вам поможет. Можно применять и предыдущую, но эта более «умная».
Ctrl+K, X — показ всех сниппетов, которые у вас есть, в виде выпадающего списка, использование интуитивно понятно
короткое_имя_снипета+Tab — использовать сниппет в коде.
Навигация по коду
Тут стоит сказать отдельно и довольно много, навигация очень удобная, особенно когда привыкаешь
F12 — перейти к определению/объявлению класса/метода/свойства. Очень применимо если вам вдруг стало интересно, а реализуется ли этой переменной, этого класса тип интерфейс IDisposable; или вы ищите в коде, «а где же объявляется эта переменная».
Ctrl+G — перейти на определённый номер строки в коде. (Отображение номеров строк можно включить: Text Editor -> Интересующий вас язык -> Display -> Line numbers — выставить галку). Иногда довольно удобно, особенно если получаете описание необработанного исключения, а там указан, как правило, номер строки.
Ctrl+] — когда курсор установлен на скобку, многострочный комментарий (/* */), регион (#region), строку, обрамлённую кавычками, эта комбинация позволит вам увидеть начало и окончание этих «блоков», перемещая курсор между ними.
Ctrl+M, M — я человек довольно ленивый и мне сложно заставить долго тыкать мышкой по ±, сворачиваю и разворачия «блоки», поэтому рекомендую данную комбинацию
Ctr+M, O — комбинация аналогичная предыдущей, только сворачивает все блоки
Ctrl+- — переход к предыдущему активному тексту (тому который вы редактировали)
Ctrl+Shift+- — переход к следующему активному тексту, если он конечно есть
Если обратите внимание то студия, по своей природе MDI, значит должна быть возможность перемещаться, между окнами:
Ctrl+Tab — аналог Alt+Tab в Windows, только применимо к студии.
Очень удобным инструментом в студии являются закладки, да-да, по аналогии с книжными. Можно отметить код чтобы потом перейти к нему:
Ctrl+B, T — поставить/снять закладку.
Ctrl+B, Ctrl+C — удалить все закладки.
Ctrl+B, N — перейти к следующей закладке.
Ctrl+B, P — перейти к предыдущей закладке.
Форматирование и редактирование
Многие знают и используют Ctrl+C и Ctrl+V, но студия обладает ещё рядом удобным комбинаций:
Ctrl+Shift+V — не отпуская Ctrl+Shift и нажимая на V, вы сможете вставить один из 10 последних кусков текста, скопированных в буфер обмена.
Tab — увеличить отступ.
Shift+Tab — уменьшить отступ.
Мне иногда не хватало вертикального выделения текста, бывает полезно. Оказывается и такая возможность есть! Стоит нажать Alt, и не отпуская, выделять мышкой текст. Но есть минус — меню и стрелочки клавиатуры :). Это решаемо, нажимаете Shift+Alt и используете стрелочки Left или Right
Если код доставшийся вам «грязен», не только по структуре, но и по внешнему оформлению, используйте:
Ctrl+E+D — форматирование всего документа, позволяет привести документ в более удобоваримый вид.
Ctrl+E+F — форматирование выбранной части текста
Иногда в целях рефакторинга или ещё каких-то благих начинаниях, есть смысл перевести все буквы в верхний или нижний регистр:
Ctrl+Shift+U — перевести выделенный блок в верхний регистр
Ctrl+U — перевести выделенный блок в нижний регистр
Небольшой экскурс в сборку и отладку
Конечно же со стороны хоткеев
Начнём со «сборки»:
Ctrl+Shift+B или F6 — собрать solution.
Shift+F6 — собрать активный проект.
Если честно, тут я немного пошаманил, заточив под себя, иногда бывает удобно пересобрать проект RebuildSolution, но почему-то хоткей для этого не предусмотрен, я поступил следующий образом:
F6 — собрать solution
Ctrl+Shift+B — пересобрать solution
Поступил я так из-за соображения, что иногда студия не выполняет пересборку проекта, а пишет «up-to-date», а мне нужно именно пересобрать.
Если появились ошибки, это плохо, но никто от них не застрахован:
F5 — запустить программу, с возможностью отладки. Или продолжить выполнение программы, после точки останова.
Ctrl+F5 — запустить программу без отладки
F9 — поставить/убрать точку останова — breakpoint
Ctrl+Shift+F9 — удалить все точки останова.
F10 — выполнить код, без захода внутрь
F11 — выполнить код, с заходом внутрь
В режиме отладки есть два типа просмотра — Watch и QuickWatch.
Вызвать QuickWatch вы можете нажав Ctrl+D, Q. Просто Watch — Ctrl+D, W.
Источник: sagitov.pro
Отладка кода в Visual Studio
Для отладки определенной веб-страницы в Visual Studio выберите эту веб-страницу в окне Solution Explorer и щелкните на кнопке Start Debugging (Начать отладку) в панели инструментов. (Если вы в данный момент редактируете веб-страницу, которую собираетесь тестировать, то выбирать ее нет необходимости — просто щелкните на кнопке Start Debugging для ее запуска.)
Дальнейшие события зависят от расположения вашего проекта. Если ваш проект хранится на удаленном веб-сервере или локальном виртуальном каталоге IIS, Visual Studio просто запускает браузер по умолчанию и направляет на соответствующий URL.
Если вы использовали приложение файловой системы, Visual Studio запускает свой встроенный веб-сервер на динамически выбранном порту (который предотвращает конфликт с IIS, если он установлен). Затем Visual Studio запускает браузер по умолчанию и передает ему URL, указывающий на локальный веб-сервер. В каждом случае реальная работа — компиляция страницы и создание объектов страницы — передается рабочему процессу ASP NET.
Тестовый сервер запускается только на время работы Visual Studio и принимает запросы исключительно от данного компьютера. После запуска встроенного веб-сервера Visual Studio добавляет в область значков панели задач представляющий его значок. Чтобы получить дополнительную информацию о тестовом сервере или завершить его работу, необходимо дважды щелкнуть на этом значке.
Разделение Visual Studio, веб-сервера и ASP.NET предоставляет несколько интересных возможностей. Например, пока окно браузера открыто, можно по-прежнему вносить изменения в код и HTML-дескрипторы веб-страниц. Завершив внесение изменений, сохраните страницу и щелкните на кнопке Refresh (Обновить) в браузере для ее повторного запроса. Хотя всегда требуется перезапуск всей страницы для просмотра результатов внесенных изменений, это более удобно, нежели повторная сборка целиком всего проекта.
Фиксация и перезапуск веб-страницы полезны, но что делать, когда необходимо отследить трудно уловимую ошибку? В этих случаях понадобятся усовершенствованные возможности отладки Visual Studio, которые рассматриваются в последующих разделах.
Если тестовый веб-сервер используется, он запускает весь код от имени вашей пользовательской учетной записи. Это отличается от намного более ограниченного поведения, наблюдаемого в IIS, где для обеспечения безопасности применяется менее привилегированная учетная запись. Важно понимать разницу, поскольку, если приложение получает доступ к защищенным ресурсам (таким как файловая система, база данных, системный реестр или журнал регистрации событий), необходимо явно разрешить доступ пользователю IIS.
Пошаговая отладка
позволяет выполнять код по одной строке за раз. Выглядит она чрезвычайно просто и подразумевает выполнение следующих действий:
-
Найдите в коде точку, в которой необходимо приостановить выполнение, и начните пошаговое выполнение (можно использовать любую исполняемую строку кода, но не объявление переменной, комментарий или пустую строку). Щелкните на поле возле кода строки, после чего появится точка останова, помеченная красным цветом:
Если вы поместите курсор над объектом, то сможете просмотреть все его свойства, щелкнув на маленьком знаке «плюс»:
Перевести программу в режим паузы можно в любой момент, щелкнув на кнопке паузы в панели инструментов или выбрав в меню Debug (Отладка) команду Break All (Остановить все).
Слежение за переменными
В некоторых случаях может понадобиться отслеживать состояние переменной без постоянного переключения в режим паузы. В таких ситуациях более полезными оказываются окна Locals (Локальные), Autos (Автоматические) и Watch (Слежение), которые позволяют отслеживать переменные во всем приложении:
Locals | Автоматически отображает все переменные в пределах текущей процедуры, предлагая быстрый обзор важных переменных |
Autos | Автоматически отображает переменные, которые система Visual Studio определила как важные для текущего оператора в коде. Сюда могут входить, например, переменные, к которым получается доступ или которые изменяются в предыдущей строке |
Watch | Отображает добавленные вами переменные. Установки слежения сохраняются вместе с проектом, чтобы можно было продолжить слежение за переменными позже. Для добавления слежения щелкните правой кнопкой мыши на переменной в коде и выберите в контекстном меню пункт Add Watch (Добавить слежение); в качестве альтернативы дважды щелкните на последней строке в окне Watch и введите имя переменной |
Каждая строка в окнах Locals, Autos и Watch предоставляет информацию о типе или классе переменной и ее текущем значении. Если переменная содержит экземпляр объекта, ее можно развернуть и просмотреть приватные члены и свойства.
Например, в окне Locals вы увидите переменную this, которая является ссылкой на текущий объект страницы. Если вы щелкнете на знаке «плюс» возле нее, появится полный список свойств страницы (и некоторые системные значения):
Окна Locals, Autos и Watch позволяют изменять переменные или свойства во время нахождения программы в режиме паузы. Дважды щелкните на текущем значении в столбце Value (Значение) и введите новое значение. Если не хватает какого-то окна слежения, отобразите его вручную, выбрав его в подменю Windows меню Debug.
Расширенные точки останова
Выберите в меню Debug (Отладка) команду Windows —> Breakpoints для отображения окна, в котором перечислены все точки останова в текущем проекте. Окно Breakpoints (Точки останова) предоставляет счетчик попаданий в точку останова. Дважды щелкнув на точке останова, можно переместиться в соответствующее место кода:
Окно Breakpoints можно также применять для отключения точки останова без ее удаления. Это позволяет сохранить точку останова, чтобы использовать во время тестирования позже. Точки останова автоматически сохраняются в файле решения.
Visual Studio позволяет настраивать точки останова так, чтобы они проявлялись только в случае соблюдения определенных условий. Чтобы настроить точку останова, щелкните на ней правой кнопкой мыши и выберите одну из перечисленных ниже опций:
Location
Используйте эту опцию, если хотите увидеть точный файл и строку, в которой находится данная точка останова.
Condition
Используйте эту опцию, если хотите настроить выражение и сделать так, чтобы эта точка останова срабатывала только в случае, когда данное выражение будет истинным, или в случае его изменения с момента последнего срабатывания данной точки останова.
Hit Count
Используйте эту опцию, если хотите создать точку останова, которая будет приостанавливать процесс выполнения только либо после определенного количества срабатываний (например, хотя бы после 20), либо через определенное количество срабатываний (например, через каждые 5).
Filter
Используйте эту опцию, если хотите включить точку останова только для конкретных процессов или потоков. В ASP.NET эта опция применяется редко, поскольку весь код веб-страниц выполняется рабочим процессом ASP.NET, а он использует пул потоков.
When Hit
Используйте эту опцию, если хотите настроить действие, которое должно автоматически выполняться при каждом срабатывании точки останова. Существует два удобных варианта. Первый — указать в качестве такого действия вывод сообщения в окне Debug (Отладка), что позволит следить за ходом выполнения кода без его загромождения операторами Debug.Write(). Такой прием называется созданием точек трассировки (tracepoint).
Второй вариант — указать в качестве такого действия запуск макроса Visual Studio, что позволит выполнить в IDE-среде практически любое действие.
Источник: professorweb.ru