Как убрать точку останова в visual studio
Точки останова
Точку останова (breakpoint) в Visual Studio можно помещать на любую строку кода, которая в действительности выполняется. Самый простой способ — щелчок на необходимой строке в окне редактора кода внутри затененной области вдоль левого края окна документа (или выделение нужной строки и нажатие клавиши ). Это приводит к размещению в данной строке точки останова, которая вызывает прерывание процесса выполнения и передачу управления отладчику. Как и в предыдущих версиях Visual Studio, точка останова обозначается большим кружком слева от соответствующей строки в окне редактора кода. Кроме того, Visual Studio выделяет саму строку, отображая ее текст и фон разными цветами. Щелчок на кружке приводит к удалению точки останова.
Если останов на определенной строке каждый раз не подходит для решения имеющейся проблемы, можно создать так называемую условную точку останова. Для этого выберите в меню Debug (Отладка) пункт Windows --- Breakpoints (Окнo --- Точки останова). Откроется диалоговое окно, позволяющее указать желаемые детали для точки останова. В этом окне можно выполнять следующие действия:
Указать, что выполнение должно прерываться лишь после прохождения точки останова определенное количество раз.
Указать, что точка останова должна вступать в действие при каждом n-ном достижении строки, например, при каждом 20-м ее выполнении (это удобно при отладке больших циклов).
Задать точки останова относительно переменных, а не команд. В таком случае наблюдение будет вестись за значением указанной переменной, и точки останова будут активизироваться при каждом изменении значения этой переменной. Однако этот вариант может сильно замедлить выполнение кода, поскольку на проверку, не изменилось ли значение отслеживаемой переменной после выполнения каждой очередной инструкции, будет тратиться дополнительное время процессора.
Слежения
После срабатывания точки останова обычно необходимо просмотреть значения переменных. Проще всего это сделать, наведя курсор мыши на имя интересующей переменной прямо в окне редактора кода. Это приводит к появлению небольшого всплывающего окошка, в котором показано значение данной переменной; это окошко можно развернуть, чтобы просмотреть дополнительные детали.
Для просмотра значений переменных можно также использовать окно Autos (Автоматические). Окно Autos представляет собой окно с вкладками, которое появляется лишь тогда, когда программа выполняется в режиме отладки. Если вы его не видите, попробуйте выбрать в меню Debug (Отладка) пункт Windows --- Autos (Окна --- Автоматические).
В этом окне рядом с переменными, которые являются классами или структурами, отображается пиктограмма с изображением знака "плюс", щелчок на которой позволяет развернуть представление переменной и просмотреть значения ее полей.
Три предлагаемых в этом окне вкладки предназначены для наблюдения за переменными трех разных категорий:
Вкладка Autos (Автоматические) позволяет просматривать значения нескольких последних переменных, к которым осуществлялся доступ в процессе выполнения программы.
Вкладка Locals (Локальные) позволяет просматривать значения переменных, к которым получается доступ в методе, выполняемом в текущий момент
Вкладка Watch (Слежение) позволяет просматривать значения любых интересующих переменных за счет явного указания их имен непосредственно в окне Watch.
Исключения
Если исключение возникает во время отладки, часто не нужно, чтобы оно обрабатывалось автоматически, особенно если это подразумевает аккуратное завершение программы. Напротив, отладчик должен помочь выяснить, по какой причине возникло это исключение. Конечно же, трудность состоит в том, что в случае написания качественного надежного и отказоустойчивого кода, программа будет автоматически обрабатывать практически все, в том числе и неполадки, которые требуется обнаружить.
Конечно, можно устанавливать точки останова в блоках catch, но это часто особо не помогает, поскольку при достижении блока catch поток управления по определению покинет соответствующий блок try. Это означает, что переменные, значения которых, скорее всего, следовало изучить для выяснения того, что пошло не так, покинут область видимости. Не будет даже возможности просматривать трассировочные данные стека для выяснения, какой метод выполнялся во время срабатывания оператора throw, поскольку управление уже покинет этот метод. Разумеется, помещение точки останова в оператор throw позволит решить эту проблему, но надо учитывать, что при написании кода защищенным образом операторов throw будет в коде очень много. Как тогда угадать, какой из них срабатывает и приводит к генерации исключения?
На самом деле в Visual Studio предлагается очень действенное решение. Если заглянуть в меню Debug (Отладка), то можно будет обнаружить там пункт Exceptions (Исключения). В случае выбора этого пункта открывается диалоговое окно Exceptions (Исключения). Это окно позволяет указывать, что должно происходить при выдаче исключения. Здесь можно указать, что выполнение должно продолжаться или же останавливаться с переходом в режим отладки, в случае чего произойдет останов, а отладчик окажется прямо на самом операторе throw:
Дополнительные команды отладки исходного кода
Компиляция практически всего коммерческого программного обеспечения на стадии отладки и на стадии подготовки окончательной версии продукта должна проводиться немного по-разному. Среда Visual Studio способна понимать это, поскольку сохраняет информацию обо всех параметрах, которые ей надлежит передавать компилятору. Для поддержки разных вариантов компоновки проекта Visual Studio потребуется сохранять подобную информацию в более чем одном экземпляре. Разные экземпляры такой информации называются конфигурациями. При создании проекта Visual Studio автоматически предлагает на выбор две таких конфигурации, которые называются, соответственно, Debug (Отладка) и Release (Выпуск):
Конфигурация Release указывает, что компилятор должен проводить в отношении компилируемого кода оптимизацию, в исполняемом коде не должно присутствовать никакой дополнительной информации, а компилятор не должен предполагать наличие препроцессорного символа Debug.
Можно также определять собственные конфигурации. Это необходимо, например, для компоновки приложения с несколькими отличающимися версиями. Раньше из-за проблем, связанных с поддержкой кодировки Unicode в Windows NT, но не в Windows 95, для многих проектов на С++ было принято создавать две конфигурации — одну для Unicode, а вторую для (multibyte character set — набор многобайтных символов).
С помощью отладчика Visual Studio можно переходить по коду для проверки состояния приложения и просмотра последовательности выполнения. Для быстрого перехода к коду, который необходимо изучить, можно использовать сочетания клавиш, команды отладки, точки останова и другие функции. Если вы знакомы с командами и сочетаниями клавиш для навигации по отладчику, вы можете быстро и с легкостью находить и устранять проблемы в работе приложений.
Если вы не знакомы с процессом отладки кода, перед выполнением задач в этой статье рекомендуется прочесть документ, посвященный отладке для начинающих, и статью Методы и инструменты отладки.
В режиме приостановки выполнения выполнение приложения приостанавливается, но функции, переменные и объекты при этом остаются в памяти. Когда отладчик находится в режиме приостановки выполнения, можно перемещаться по коду. Существует два стандартных способа быстрого перехода в режим приостановки выполнения:
Начните пошаговое выполнение кода, нажав клавишу F10 или F11. Это позволит быстро найти точку входа приложения. После этого можно продолжать нажимать команды перехода для перемещения по коду.
Например, в редакторе кода в Visual Studio можно использовать команду Выполнить до текущей позиции, чтобы запустить приложение, присоединить отладчик и перейти в режим приостановки выполнения, а затем нажать клавишу F11 для перехода по коду:
В режиме приостановки выполнения можно переходить по коду, используя различные команды. Можно выполнять поиск ошибок и нарушений целостности данных, проверяя значения переменных. Для некоторых типов проектов можно также вносить корректировки в приложение.
Большинство окон отладчика, таких как Модули и Контрольные значения, доступны только тогда, когда отладчик присоединен к приложению. Некоторые возможности отладчика, такие как просмотр значений переменных в окне локальных переменных или вычисление выражений в окне контрольных значений, доступны только при приостановке отладчика (то есть в режиме приостановки выполнения).
Если во время приостановки выполнения кода не загружены исходные файлы или файлы символов (PDB), отладчик отображает страницу Исходный файл не найден или Символы не найдены, которая поможет найти и загрузить файлы. См. статью Указание файлов символов (.pdb) и файлов с исходным кодом в отладчике Visual Studio. Если вы не можете загрузить исходные файлы или файлы символов, можно выполнить отладку инструкций на языке ассемблера в окне Дизассемблирование.
Пошаговое прохождение кода
С помощью команд пошагового выполнения отладчика можно проверять состояние приложения или изучать его последовательность выполнения.
Построчное выполнение кода
Для остановки выполнения на каждом операторе во время отладки используйте команду Отладка > Шаг с заходом или нажмите клавишу F11.
Отладчик осуществляет пошаговое выполнение операторов кода, а не физических строк. Например, предложение if может быть записано в одной строке:
Но при пошаговом выполнении этой строки отладчик рассматривает условие как один шаг, а результат — как другой шаг. В предыдущем примере условие выполняется.
При вызове вложенных функций команда Шаг с заходом позволяет попасть в самую глубокую вложенную функцию. Например, если использовать Шаг с заходом на вызове Func1(Func2()) , отладчик заходит в функцию Func2 .
При выполнении каждой строки кода можно наводить указатель мыши на переменные, чтобы просматривать их значения, или использовать окна Локальные переменные и Контрольные значения для наблюдения за изменением значений. Кроме того, можно визуально отслеживать стек вызовов при выполнении шагов с заходом в функции. (Сведения, касающиеся только Visual Studio Enterprise, см. в статье Сопоставление методов в визуализации стека вызовов при отладке.)
Пошаговое прохождение кода и пропуск некоторых функций
При отладке можно пропустить функцию. Или, возможно, вы знаете, что некоторый код работает, например, хорошо протестированный код библиотеки. Чтобы пропустить код во время пошагового выполнения, можно использовать приведенные ниже команды. Функции по-прежнему выполняются, но отладчик пропускает их.
Команда с клавиатуры | Команда меню «Отладка» | Описание |
---|---|---|
F10 | Шаг с обходом | Если текущая строка содержит вызов функции, команда Шаг с обходом выполняет код, а затем останавливает выполнение в первой строке кода после возврата управления вызываемой функцией. |
SHIFT+F11 | Шаг с выходом | Команда Шаг с выходом возобновляет выполнение кода и приостанавливает выполнение, когда текущая функция возвращает управление. Отладчик пропускает текущую функцию. |
Выполнение до указанного места или функции
Вам может потребоваться выполнить код непосредственно до определенного места или функции, если вы точно знаете, какой код нужно проверить или с какого места следует начать отладку.
Выполнение до точки останова в коде
Чтобы задать простую точку останова в коде, щелкните в левом поле напротив строки кода, в которой нужно приостановить выполнение. Можно также выбрать строку и нажать клавишу F9, выбрать команду Отладка > Переключить точку останова или щелкнуть правой кнопкой мыши и выбрать команду Точка останова > Вставить точку останова. Точка останова отображается как красный кружок в левом поле рядом со строкой кода. Отладчик приостанавливает выполнение непосредственно перед выполнением строки.
Точки останова в Visual Studio предоставляют широкий набор функций, таких как условные точки останова и точки трассировки. Дополнительные сведения см. в статье Использование точек останова.
Выполнение до точки останова функции
Можно дать отладчику команду на выполнение до тех пор, пока не будет достигнута определенная функция. Можно задать функцию по имени или выбрать ее из стека вызовов.
Указание точки останова функции по имени
Выберите команду Отладка > Создать точку останова > Точка останова функции.
В диалоговом окне Новая точка останова функции введите имя функции и выберите ее язык:
Щелкните ОК.
Если функция перегружается или находится в нескольких пространствах имен, нужную функцию можно выбрать в окне Точки останова:
Выбор точки останова функции из стека вызовов
Во время отладки откройте окно Стек вызовов, выбрав пункт Отладка > Окна > Стек вызовов.
В окне Стек вызовов щелкните правой кнопкой мыши имя функции и выберите команду Выполнить до текущей позиции или нажмите клавиши CTRL+F10.
Сведения о визуальном отслеживании стека вызовов см. в статье Сопоставление методов в визуализации стека вызовов при отладке.
Выполнение до расположения курсора
Чтобы выполнить код до позиции курсора, в окне исходного кода или в окне Стек вызовов выберите строку, в которой нужно прервать выполнение, а затем щелкните ее правой кнопкой мыши и выберите команду Выполнить до текущей позиции или нажмите клавиши CTRL+F10. Выбор команды Выполнить до текущей позиции аналогичен заданию временной точки останова.
Принудительное выполнение до расположения курсора
Чтобы выполнить код до позиции курсора, в окне исходного кода или в окне Стек вызовов выберите строку, в которой нужно прервать выполнение, а затем щелкните ее правой кнопкой мыши и выберите элемент Force Run To Cursor (Принудительное выполнение до расположения курсора). Если выбрать параметр Force Run To Cursor (Принудительное выполнение до расположения курсора), все точки останова и первичные исключения будут пропускаться, пока отладчик не достигнет строки кода, где находится курсор.
Выполнение до щелкнутого
Во время приостановки работы отладчика можно навести указатель мыши на оператор в исходном коде или в окне Дизассемблирование и щелкнуть значок с зеленой стрелкой Выполнить до этого места. Если используется команда Выполнение до щелкнутого позволяет не устанавливать временную точку останова.
Команда Выполнение до щелкнутого доступна начиная с версии Visual Studio 2017.
Принудительное выполнение до щелчка
Когда работа отладчика приостановлена, вы можете навести указатель на оператор в исходном коде, удерживая нажатой клавишу SHIFT, и выбрать элемент Принудительное выполнение до текущей позиции (значок с двумя зелеными стрелками). При выборе этого параметра приложение присоединяет отладчик Visual Studio и приостанавливает выполнение в положении курсора. Все точки останова и первичные исключения, обнаруженные во время выполнения, временно отключаются.
Параметр Force Run to Click (Принудительное выполнение до отмеченного щелчком расположения) доступен, начиная с версии Visual Studio 2022.
Приостановка выполнения кода вручную
Чтобы приостановить выполнение в следующей доступной строке кода в выполняющемся приложении, выберите команду Отладка > Прервать все или нажмите клавиши CTRL+ALT+BREAK.
Перемещение указателя для изменения потока выполнения
Когда работа отладчика приостановлена, желтая стрелка в поле исходного кода или в окне Дизассемблированный код отмечает расположение оператора, который должен быть выполнен следующим. Вы можете изменить следующий оператор, который будет выполняться, переместив эту стрелку. Можно пропустить код или вернуться к предыдущей строке. Перемещение указателя полезно при возникновении таких ситуаций, как пропуск кода, содержащего известную ошибку.
Для изменения оператора, который будет выполнен следующим, отладчик должен находиться в режиме приостановки выполнения. В окне исходного кода или окне Дизассемблированный код перетащите желтую стрелку в другую строку или щелкните правой кнопкой мыши строку, которую нужно выполнить следующей, и выберите команду Задать следующий оператор.
Счетчик программы переходит непосредственно к новому расположению. Инструкции между старой и новой точками не выполняются. Однако при перемещении точки выполнения обратно промежуточные инструкции не отменяются.
Отладка кода, не являющегося пользовательским
По умолчанию отладчик пытается выполнить отладку только кода вашего приложения, так как включена функция Только мой код. Подробнее о том, как эта функция работает с проектами различных типов и на разных языках, а также о том, как настроить ее, см. в статье Только мой код.
Для просмотра кода платформы, кода сторонней библиотеки или системных вызовов во время отладки можно отключить функцию "Только мой код". В меню Сервис (или Отладка) выберите пункты Параметры > Отладка и снимите флажок Включить только мой код. Когда функция "Только мой код" отключена, в окнах отладчика отображается код, не являющийся пользовательским, и отладчик может выполнять его по шагам.
Режим "Только мой код" не поддерживается для проектов устройств.
Отладка системного кода
Если вы загрузили отладочные символы для системного кода Майкрософт и отключили режим "Только мой код", можно производить шаг с заходом в системный вызов так же, как в любой другой вызов.
Чтобы загрузить символы для определенного системного компонента, выполните указанные ниже действия.
Во время отладки откройте окно Модули, выбрав пункт Отладка > Окна > Модули или нажав клавиши CTRL+ALT+U.
Определить, для каких модулей символы загружены, можно по значению в столбце Состояние символов в окне Модули. Щелкните правой кнопкой мыши модуль, для которого требуется загрузить символы, и выберите команду Загрузить символы.
Шаг с заходом в свойства и операторы в управляемом коде
По умолчанию отладчик обходит свойства и операторы при пошаговом выполнении в управляемом коде. В большинстве случаев это повышает удобство и эффективность отладки. Чтобы отключить пошаговое выполнение свойств и операторов, выберите пункт Отладка > Параметры. На странице Отладка > Общие снимите флажок Обход свойств и операторов (только управляемый код) .
Как отключить работу точек останова во время отладки?
Вопрос.
1. Можно ли во время отладки после режима "работа программы по шагам " удалить "точку останова" и сделать чтобы программа снова работала в непрерывном режиме?
Т.е не перезапускать отлакду..
Как отключить режим отладки в Dev-C++?
В конце программы (консольной) обычно ничего не выводилось, а теперь начало появляться такое.
Время отладки программы как вывести
как вывести время выполнения программы в миллисекунды не могу разобраться.
Как во время отладки посмотреть содержимое массивов?
привет! есть пара вопросов по отладке кода -как во время отладки посмотреть содержимое массивов.
Как узнать значение массива по указателю во время отладки?
А как посмотреть значения массива, если есть только указатель на его первый элемент? Например: .
Visual Studio отказывается забыть точки останова?
Visual Studio запоминает точки останова из предыдущих сессий отладки, и это здорово.
Однако, когда я отлаживаю и удаляю одну из этих «старых» точек останова, щелкая по ней, она только временно удаляется. Я имею в виду, что в следующий раз, когда я буду отлаживать, точка останова, которая, как я думал, была удалена, вернулась.
Это супер раздражает — есть ли настройка, чтобы он этого не делал?
тогда зайдите в Debug меню Delete All Breakpoints Ctrl+Shift+F9
Проблема в том, что дочерние контрольные точки ваших контрольных точек сохраняются. Дочерние точки останова создаются (в определенных ситуациях) при установке точек останова во время сеанса отладки.
Безошибочный способ удаления точки останова (и дочерних элементов) — вручную найти ее в окне точки останова и удалить ее оттуда. (Выберите верхний узел записи, нажмите Delete .)
Если вы используете (старую) версию Visual Studio, которая поддерживает макросы VBScript, вы можете запустить макрос, размещенный здесь (между сеансами отладки), чтобы удалить дочерние точки останова. Это сделает удаление точек останова, щелкнув по глифу, несколько более эффективным и предсказуемым, но это по-прежнему проблематично и неудобно.
Я изо всех сил пытался найти «Окно BreakPoints». Так вот быстрый способ открыть его — ctrl + alt + B
Или вы можете вручную перейти к «Debug-> Windows-> Breakpoints», чтобы открыть его.
Или вы можете нажать ctrl + shift +, F9 чтобы удалить все точки останова одновременно!
Мой поток с липкими контрольными точками во время контрольных точек выглядит следующим образом:
Во время отладки отключите точку останова вместо ее удаления.
Возможные способы отключения точки останова:
- наведите курсор на курсор и щелкните значок двух циклов;
- или используйте контекстное меню на нем;
- или сочетание клавиш CTRL + F9 (не Shift + CTRL + F9, поскольку оно очищает все точки останова).
Позже, во время разработки, я удаляю отключенную точку останова, когда вижу ее.
PS. Также хорошей практикой является удаление всех точек останова время от времени.
Как удалить сразу все точки останова в Visual Studio
В процессе работы над той или иной задачей в программе может накопиться достаточно большое количество точек останова. И при переходе к следующей задаче их как правило приходится удалять. Притом все.
Удалить их можно вручную. Но, это, во-первых, долго. Во-вторых, одну или несколько точек останова можно пропустить или просто-напросто забыть. Как результат, старые точки останова «всплывают» уже в новой задаче.
К счастью, в Visual Studio есть штатный способ сразу удалить все ранее созданные точки останова.
Для этого в главном меню Visual Studio нужно открыть пункт «Отладка» и в списке выбрать подпункт «Удалить все точки останова» (см. скриншот). Или воспользоваться сочетанием «горячих» клавиш Ctrl+Shift+F9.
предположим, у меня есть 10 точек останова, и я хочу очистить одну, но не другие 9.
Если я переключаю точку останова на тот, который я хочу удалить, он воскрешается при следующем перезапуске приложения. Единственный способ, который я знаю, чтобы навсегда избавиться от него, - это очистить все точки останова, чего я бы предпочел не делать, так как мне пришлось бы сбросить остальные 9.
есть ли лучший способ в любой версии VS?
состояние точки останова изменяется только временно, если вы изменяете его во время отладки, и это точка останова с несколькими границами. На самом деле это особенность Visual Studio. См.последний пост здесь.
Если вы не отлаживаете, и вы удалите его,то он не вернется. В качестве альтернативы, как предлагали другие, вы можете удалить его навсегда с помощью окна управления точкой останова.
нажатие Ctrl+Alt+B вызовет список всех точек останова в вашем решении, из которого вы можете вручную переключать или удалять их с помощью правой кнопки мыши.
откройте окно точки останова (отладка - > Windows - > точки останова), выберите точку останова, которую вы хотите удалить, и нажмите клавишу delete (или щелкните значок Креста).
Если вы переключаете точку останова с помощью клавиатуры (F9 с помощью моих сопоставлений клавиатуры), она иногда не удаляет ее должным образом. Нажатие F9 снова удалит его полностью (это связано с тем, что точка останова устанавливается на нескольких потоках и переключает ее, пока отладка отключает только основную точку останова, но не те, для другой поток.)
Если вы хотите удалить точку останова с помощью F9 или нажав красный глиф, эта точка останова должна быть бездетной. В противном случае точка останова будет сохраняться через оставшиеся дочерние точки останова. (Дочерние точки останова могут формироваться при установке точек останова во время отладки.)
Вы можете проверить этот вопрос:" отключить / удалить дочерние точки останова?", для макроса для удаления дочерних точек останова. Я думаю, что вы не должны вызывать макрос во время сеанса отладки, поскольку это может привести к ваши точки останова, чтобы быть хитом.
следующий код можно использовать в качестве макроса для удаления точки останова в текущей выбранной строке. (Обратите внимание, что Visual Studio автоматически выбирает линию точки останова при попадании.)
вы можете назначить сочетание клавиш для легкого доступа к нему. (Инструменты > Параметры > Окружающая Среда > Клавиатура.)
здесь есть некоторые ответы, но, на мой взгляд, предлагаемые действия отвлекают во время отладки (я не хочу терять фокус).
мой поток с липкими точками останова во время точек останова выглядит следующим образом:
во время отладки, отключить точка останова вместо ее удаления.
возможные способы отключения останова:
- наведите курсор и щелкните значок двух циклов;
- или используйте контекстное меню на нем;
- или клавиатура короткий CTRL+F9.
позже, во время разработки, я удаляю отключенную точку останова, когда вижу ее.
Пошаговое выполнение (рассматривается в уроке «3.6 – Использование встроенного отладчика: пошаговое выполнение») полезно для изучения каждой отдельной строки вашего кода изолированно. Но в большой программе может потребоваться много времени, чтобы пройти через весь код, чтобы даже добраться до точки, которую вы хотите изучить более подробно.
К счастью, современные отладчики предоставляют больше инструментов, которые помогают нам эффективно отлаживать наши программы. В этом уроке мы рассмотрим некоторые функции отладчика, которые позволяют нам быстрее ориентироваться в коде.
Выполнение до курсора
Первую полезную команду обычно называют «Выполнить до курсора» (Run to Cursor). Эта команда «Выполнить до курсора» выполняет программу до тех пор, пока выполнение не достигнет инструкции, выбранной курсором. Затем отладчик возвращает управление вам, чтобы вы могли начать отладку с этой точки. Это обеспечивает эффективный способ начать отладку в определенной точке вашего кода или, если уже отладка начата, перейти прямо в то место, которое вы хотите изучить дальше.
Для пользователей Visual Studio
В Visual Studio к команде выполнения до курсора можно получить доступ, кликнув правой кнопкой мыши на инструкции в коде и выбрав в контекстном меню Выполнить до текущей позиции (Run to Cursor), или нажав комбинацию клавиш Ctrl + F10 .
Для пользователей Code::Blocks
В Code::Blocks к команде «выполнить до курсора» можно получить доступ, кликнув правой кнопкой мыши на инструкции в коде и выбрав либо Run to Cursor (Выполнить до курсора) из контекстного меню, либо меню Debug (Отладка) → Run to Cursor (Выполнить до курсора), либо нажав клавишу F4 .
Давайте попробуем эту команду с помощью той же программы, которую мы использовали в предыдущем уроке:
Просто кликните правой кнопкой мыши в любом месте строки 5, затем выберите Выполнить до текущей позиции.
Рисунок 1 – Положение маркера выполнения после запуска выполнения до курсора для строки 5
Вы заметите, что программа запустится, а маркер выполнения переместится на только что выбранную строку. Ваша программа выполнилась до этой точки и теперь ожидает ваших дальнейших команд отладки. Отсюда вы можете пошагово выполнять свою программу, переходить к курсору в другое место и т.д.
Если вы запустили выполнение до курсора для места, которое не выполняется, выполнение до курсора просто запустит вашу программу до ее завершения.
Продолжение
Когда вы находитесь в середине сеанса отладки, вы можете захотеть просто запустить выполнение программы с этой точки. Самый простой способ сделать это – использовать команду Продолжить (Continue). Команда отладки Продолжить (Continue) просто продолжает выполнение программы как обычно, либо до тех пор, пока программа не завершится, либо пока что-то не вызовет возврат управления вам (например, точка останова, которую мы рассмотрим позже в этом уроке).
Для пользователей Visual Studio
В Visual Studio к команде продолжить можно получить доступ во время отладки программы через меню Отладка (Debug) → Продолжить (Continue), или нажав клавишу F5 .
Для пользователей Code::Blocks
В Code::Blocks к команде продолжить можно получить доступ во время отладки программы через меню Debug (Отладка) → Start / Continue (Запуск / Продолжить), или нажав клавишу F8 .
Давайте протестируем команду продолжить. Если маркер выполнения еще не находится в строке 5, запустите выполнение до курсора для строки 5. Затем выберите продолжить с этой точки. Ваша программа завершит выполнение, а затем завершится.
Запуск
У команды продолжить есть брат-близнец по имени запуск. Команда Запуск (Start) выполняет то же действие, что и продолжить, только начиная с самого начала программы. Её можно вызвать только тогда, когда сеанс отладки еще не запущен.
Для пользователей Visual Studio
В Visual Studio к команде запуска можно получить доступ, когда отладка программы еще не выполняется, с помощью меню Отладка (Debug) → Начать отладку (Start Debugging) или путем нажатия клавиши F5 .
Для пользователей Code::Blocks
В Code::Blocks к команде запуска можно получить доступ, когда отладка программы еще не выполняется, с помощью меню Debug (Отладка) → Start / Continue (Запуск / Продолжить), или нажав клавишу F8 .
Если вы используете команду запуска в приведенном выше примере программы, она будет выполняться без прерываний. Хотя это может показаться бесполезным, но это только потому, что мы не сказали отладчику прервать выполнение программы. Мы воспользуемся этой командой с большей пользой в следующем разделе.
Точки останова
Последняя тема, о которой мы поговорим в этом разделе, – это точки останова. Точка останова (breakpoint) – это специальный маркер, который сообщает отладчику остановить выполнение программы при работе в режиме отладки в точке останова.
Для пользователей Visual Studio
В Visual Studio вы можете установить или удалить точку останова через меню Отладка (Debug) → Вставить точку останова (Insert breakpoint) / Удалить точку останова (Delete breakpoint), или кликнув правой кнопкой мыши на инструкции и выбрав в контекстном меню Вставить точку останова (Insert breakpoint) / Удалить точку останова (Delete breakpoint), либо нажав клавишу F9 , либо кликнув слева от номера строки (в светло-серой области).
Для пользователей Code::Blocks
В Code::Blocks вы можете установить или удалить точку останова через меню Debug (Отладка) → Toggle breakpoint (Переключить точку останова), или кликнув правой кнопкой мыши на инструкции и выбрав в контекстном меню Toggle breakpoint (Переключить точку останова), либо нажав клавишу F5 , либо кликнув справа от номера строки.
Когда вы установите точку останова, вы увидите значок нового типа. Visual Studio и Code::Blocks используют красный кружок:
Рисунок 2 – Индикация точки останова в строке 5
Установите точку останова в строке 5, как показано на изображении выше.
Теперь выберите команду запуск, чтобы отладчик запустил ваш код, и давайте посмотрим, как работает точка останова. Вы заметите, что вместо того, чтобы работать до конца программы, отладчик останавливается в точке останова (с маркером выполнения, расположенным над значком точки останова):
Рисунок 3 – Отладчик остановился в точке останова в строке 5
Это как если бы вы запустили выполнение до курсора в этой точке.
Точки останова имеют несколько преимуществ по сравнению с выполнением до курсора. Во-первых, точки останова заставят отладчик возвращать вам управление каждый раз, когда они встречаются (в отличие от выполнения до курсора, которое выполняется до курсора только один раз при каждом вызове). Во-вторых, вы можете установить точку останова, и она будет сохраняться до тех пор, пока вы ее не удалите, тогда как с выполнением до курсора вам нужно находить место, до которого вы хотите запустить выполнение, каждый раз, когда вы вызываете команду.
Обратите внимание, что точки останова, размещенные на строках, которые не находятся на пути выполнения, не заставят отладчик останавливать выполнение кода.
Давайте взглянем на слегка измененную программу, которая лучше иллюстрирует разницу между точками останова и выполнением до курсора:
Сначала запустите новый сеанс отладки, а затем выполнение до курсора в строке 5. Теперь выберите продолжить. Программа продолжится до конца (она не остановится на строке 5 снова, даже если строка 5 выполняется еще дважды).
Затем установите точку останова в строке 5, затем выберите запуск. Программа остановится на строке 5. Теперь выберите продолжить. Программа остановится на строке 5 во второй раз. Выберите продолжить снова, и она остановится в третий раз. Еще одна команда продолжить, и программа завершится. Вы можете видеть, что точка останова заставляла программу останавливаться столько раз, сколько выполнялась эта строка.
Задать следующую инструкцию
Есть еще одна команда отладки, которая используется довольно редко, но, по крайней мере, о ней стоит знать, даже если вы не будете использовать ее очень часто. Команда Задать следующую инструкцию (Set next statement) позволяет нам изменить точку выполнения на какую-либо другую инструкцию (иногда неофициально называется прыжком). Её можно использовать для прыжка вперед к точке выполнения и пропуска кода, который в противном случае выполнялся бы, или назад для того, чтобы что-то, что уже было выполнено, запустилось снова.
Для пользователей Visual Studio
В Visual Studio вы можете перейти к точке выполнения, кликнув на инструкции правой кнопкой мыши и выбрав Задать следующую инструкцию (Set next statement) в контекстном меню, или нажав комбинацию клавиш Ctrl + Shift + F10 . Этот пункт является контекстным и появляется только при отладке программы.
Для пользователей Code::Blocks
В Code::Blocks вы можете перейти к точке выполнения через меню Debug (Отладка) → Set next statement (Задать следующую инструкцию), или кликнув правой кнопкой мыши на инструкции и выбрав Set next statement (Задать следующую инструкцию) в контекстном меню. Code::Blocks не имеет сочетания горячих клавиш для этой команды.
Давайте посмотрим, как прыгать вперед:
Сначала запустите выполнение до курсора в строке 11. На этом этапе вы должны увидеть значение 5 в окне консоли.
Теперь кликните правой кнопкой мыши на строку 12 и выберите Задать следующую инструкцию. Это приведет к тому, что строка 11 пропускается и не выполняется. Затем выберите Продолжить, чтобы завершить выполнение программы.
Результат работы вашей программы должен выглядеть так:
Мы видим, что вызов printValue(6) был пропущен.
Эта функция может быть полезна в нескольких контекстах.
В нашем исследовании основных методов отладки мы обсудили закомментирование функции как способ определить, сыграла ли данная функция роль в возникновении проблемы. Для этого необходимо изменить наш код и позже не забыть раскомментировать функцию. В отладчике нет прямого способа пропустить функцию, поэтому, если вы решите, что хотите это сделать, использование Задать следующую инструкцию (Set next statement) для прыжка через вызов функции – самый простой способ сделать это.
Прыжок назад также может быть полезен, если мы хотим увидеть, как только что выполненная функция запускается снова, чтобы мы могли увидеть, что она делает.
С тем же кодом, приведенным выше, запустите выполнение до курсора в строке 12. Затем задайте следующую инструкцию на строку 11 и выполните команду продолжить. Результат работы программы должен быть следующим:
Предупреждение
Команда задать следующую инструкцию изменит точку выполнения, но не изменит состояние программы. Ваши переменные сохранят те значения, которые были у них до прыжка. В результате прыжки могут привести к тому, что ваша программа будет выдавать значения, результаты или поведение, отличающиеся от обычного последовательного выполнения. Используйте эту функцию с умом (особенно при прыжках назад).
Предупреждение
Вы не должны использовать команду задать следующую инструкцию для изменения точки выполнения на другую функцию. Это приведет к неопределенному поведению и, вероятно, к сбою.
Заключение
Теперь вы узнали об основных способах использования встроенного отладчика для наблюдения и управления выполнением вашей программы. Хотя эти команды могут быть полезны для диагностики проблем с последовательностью выполнения кода (например, для определения того, вызываются ли определенные функции или нет), они являются лишь частью преимуществ, которые дает встроенный отладчик. В следующем уроке мы начнем изучать дополнительные способы проверки состояния вашей программы, для чего вам понадобится использование этих команд.
Читайте также: