Отладка программы

Отладка кода, не являющегося пользовательскимDebug non-user code

По умолчанию отладчик пытается выполнить отладку только кода вашего приложения, так как включена функция Только мой код.By default, the debugger tries to debug only your app code by enabling a setting called Just My Code. Дополнительные сведения о том, как эта функция работает с проектами различных типов и на разных языках, а также о том, как настроить ее, см. в статье Только мой код.For more details about how this feature works for different project types and languages, and how you can customize it, see Just My Code.

Для просмотра кода платформы, кода сторонней библиотеки или системных вызовов во время отладки можно отключить функцию «Только мой код».To look at framework code, third-party library code, or system calls while debugging, you can disable Just My Code. В меню Сервис (или Отладка) выберите пункты Параметры > Отладка и снимите флажок Включить только мой код.In Tools (or Debug) > Options > Debugging, clear the Enable Just My Code check box. Когда функция «Только мой код» отключена, в окнах отладчика отображается код, не являющийся пользовательским, и отладчик может выполнять его по шагам.When Just My Code is disabled, non-user code appears in the debugger windows, and the debugger can step into the non-user code.

Примечание

Режим «Только мой код» не поддерживается для проектов устройств.Just My Code is not supported for device projects.

Отладка системного кодаDebug system code

Если вы загрузили отладочные символы для системного кода Майкрософт и отключили режим «Только мой код», можно производить шаг с заходом в системный вызов так же, как в любой другой вызов.If you have loaded debugging symbols for Microsoft system code, and disabled Just My Code, you can step into a system call just as you can any other call.

Сведения о загрузке символов Майкрософт см. в разделе .To load Microsoft symbols, see .

Чтобы загрузить символы для определенного системного компонента, выполните указанные ниже действия.To load symbols for a specific system component:

  1. Во время отладки откройте окно Модули, выбрав пункт Отладка > Окна > Модули или нажав клавиши CTRL+ALT+U.While you’re debugging, open the Modules window by selecting Debug > Windows > Modules, or pressing Ctrl+Alt+U.

  2. Определить, для каких модулей символы загружены, можно по значению в столбце Состояние символов в окне Модули.In the Modules window, you can tell which modules have symbols loaded in the Symbol Status column. Щелкните правой кнопкой мыши модуль, для которого требуется загрузить символы, и выберите команду Загрузить символы.Right-click the module that you want to load symbols for, and select Load Symbols.

Шаг с заходом в свойства и операторы в управляемом кодеStep into properties and operators in managed code

По умолчанию отладчик обходит свойства и операторы при пошаговом выполнении в управляемом коде.The debugger steps over properties and operators in managed code by default. В большинстве случаев это делает отладку более удобной и эффективной.In most cases, this provides a better debugging experience. Чтобы включить пошаговое выполнение свойств и операторов, выберите пункт Отладка > Параметры.To enable stepping into properties or operators, choose Debug > Options. На странице Отладка > Общие снимите флажок Обход свойств и операторов (только управляемый код) .On the Debugging > General page, clear the Step over properties and operators (Managed only) check box.

Когда следует использовать отладчикWhen to use a debugger

Отладчик — важнейший инструмент для поиска и устранения ошибок в приложениях.The debugger is an essential tool to find and fix bugs in your apps. Однако большое значение имеет контекст

Важно использовать все средства, имеющиеся в вашем распоряжении, чтобы быстро устранять ошибки.However, context is king, and it is important to leverage all the tools at your disposable to help you quickly eliminate bugs or errors. Зачастую лучшим «средством» являются правильные методики написания кода.Sometimes, the right «tool» might be a better coding practice

Зная, когда лучше использовать отладчик, а когда — другие средства, вы также сможете более эффективно использовать отладчик.By learning when to use the debugger vs. some other tool, you will also learn how to use the debugger more effectively.

Место отладки в цикле разработки программы

Типичный цикл разработки, за время жизни программы многократно повторяющийся, выглядит примерно так:

  1. Программирование — внесение в программу новой функциональности, исправление существующих ошибок.
  2. Тестирование (ручное или автоматизированное; программистом, тестером или пользователем; «дымовое», в режиме чёрного ящика или модульное…) — обнаружение факта ошибки.
  3. Воспроизведение ошибки — выяснение условий, при которых ошибка случается. Это может оказаться непростой задачей при программировании параллельных процессов и при некоторых необычных ошибках, известных как гейзенбаги.
  4. Отладка — обнаружение причины ошибки.

Безопасность программного кода и отладка

В программном коде может быть так называемое недокументированное поведение — серьёзные ошибки, которые не проявляются при нормальном ходе выполнения программы, однако весьма опасны для безопасности всей системы в случае целенаправленной атаки. Чаще всего это результат ошибок программиста. Наиболее известные примеры — это SQL-инъекция и переполнение буфера. В данном случае задача отладки это:

  • Выявление недокументированного поведения системы
  • Устранение небезопасного кода

Выделяют такие методы:

  • статический анализ кода. На этой фазе программа сканер ищет последовательности в исходном тексте, соответствующие небезопасным вызовам функций и т. д. Фактически идет сканирование исходного текста программы на основе специальной базы правил, которая содержит описание небезопасных образцов кода.
  • фаззинг. Это процесс подачи на вход программы случайных или некорректных данных и анализ реакции программы.
  • Reverse engineering (Обратная инженерия). Этот случай возникает, когда независимые исследователи ищут уязвимости и недокументированные возможности программы.

Инструменты

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

Инструменты отладки

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

Также полезными инструментами в руках программиста могут оказаться:

  • Профилировщики. Они позволят определить, сколько времени выполняется тот или иной участок кода. Анализ покрытия позволяет выявить неисполняемые участки кода.
  • API логгеры позволяют отследить взаимодействие программы и Windows API при помощи записи сообщений Windows в лог.
  • Дизассемблеры позволяют посмотреть ассемблерный код исполняемого файла
  • Снифферы помогут отследить сетевой трафик, генерируемый программой
  • Снифферы аппаратных интерфейсов позволяют увидеть данные, которыми обмениваются система и устройство.
  • Логи системы.

Использование языков программирования высокого уровня обычно упрощает отладку, если такие языки содержат, например, средства обработки исключений, сильно облегчающие поиск источника проблемы. В низкоуровневых языках ошибки могут приводить к незаметным проблемам — например, повреждениям памяти и утечкам памяти. Тогда бывает довольно трудно определить, что стало первоначальной причиной ошибки. В этих случаях могут потребоваться сложные приёмы и средства отладки.

Инструменты, снижающие потребность в отладке

Другое направление — сделать, чтобы отладка нужна была как можно реже. Для этого применяются:

  • Контрактное программирование — чтобы программист подтверждал другим путём, что ему на выходе нужно именно такое поведение программы. В языках, в которых контрактного программирования нет, используется самопроверка программы в ключевых точках.
  • Модульное тестирование — проверка поведения программы по частям.
  • Статический анализ кода — проверка кода на стандартные ошибки «по недосмотру».
  • Высокая культура программирования, в частности, паттерны проектирования, соглашения об именовании и прозрачное поведение отдельных блоков кода — чтобы объявить себе и другим, каким образом должна вести себя та или иная функция.
  • Широкое использование проверенных внешних библиотек.

Переход в режим приостановки выполненияGet into «break mode»

В режиме приостановки выполнения выполнение приложения приостанавливается, но функции, переменные и объекты при этом остаются в памяти.In break mode, app execution is suspended while functions, variables, and objects remain in memory. Когда отладчик находится в режиме приостановки выполнения, можно переходить по коду.Once the debugger is in break mode, you can navigate through your code. Наиболее распространенные способы быстрого перехода в режим приостановки выполнения:The most common ways to get into break mode quickly is to either:

  • Начните пошаговое выполнение кода, нажав клавишу F10 или F11.Begin code stepping by pressing F10 or F11. Это позволит быстро найти точку входа в приложение, после чего можно продолжать использовать команды пошагового выполнения для перехода по коду.This allows you to quickly find the entry point of your app, then you can continue pressing step commands to navigate code.

  • , например установив точку останова и запустив приложение., for example, by setting a breakpoint and starting your app.

    Например, в редакторе кода в Visual Studio можно использовать команду Выполнить до текущей позиции, чтобы запустить приложение, присоединить отладчик и перейти в режим приостановки выполнения, а затем нажать клавишу F11 для перехода по коду.For example, from the code editor in Visual Studio, you can use the Run to Cursor command to start the app, debugger attached, and get into break mode, then F11 to navigate code.

В режиме приостановки выполнения можно переходить по коду, используя различные команды.Once in break mode, you can use a variety of commands to navigate through your code. Во время режима приостановки выполнения можно выполнять поиск ошибок и нарушений целостности данных, проверяя значения переменных.While in break mode, you can examine the values of variables to look for violations or bugs. Для некоторых типов проектов можно также вносить корректировки в приложение.For some project types, you can also make adjustments to the app while in break mode.

Большинство окон отладчика, таких как Модули и Контрольные значения, доступны только тогда, когда отладчик присоединен к приложению.Most debugger windows, like the Modules and Watch windows, are available only while the debugger is attached to your app. Некоторые возможности отладчика, такие как просмотр значений переменных в окне локальных переменных или вычисление выражений в окне контрольных значений, доступны только при приостановке отладчика (то есть в режиме приостановки выполнения).Some debugger features, such as viewing variable values in the Locals window or evaluating expressions in the Watch window, are available only while the debugger is paused (that is, in break mode).

Примечание

Если во время приостановки выполнения кода не загружены исходные файлы или файлы символов (PDB), отладчик отображает страницу Исходный файл не найден или Символы не найдены, которая поможет найти и загрузить файлы.If you break into code that doesn’t have source or symbol (.pdb) files loaded, the debugger displays a Source Files Not Found or Symbols Not Found page that can help you find and load the files. См. статью Указание файлов символов (.pdb) и файлов с исходным кодом в отладчике Visual Studio.See Specify symbol (.pdb) and source files. Если вы не можете загрузить исходные файлы или файлы символов, можно выполнить отладку инструкций на языке ассемблера в окне Дизассемблирование.If you can’t load the symbol or source files, you can still debug the assembly instructions in the Disassembly window.

Как включить отладку

Для Android 4.1 и более ранних: когда меню разработчика видно:

Отладка программы

В ранних версиях Android опции разработчика доступны в явном и открытом виде. Просто откройте настройки системы. В разных версиях раздел опций разработчика может находиться в разных местах: в общем списке, в разделе «Приложения», в главном меню.

Выберите пункт «Отладка по USB» и поставьте там галочку. Вы увидите всплывающее окно с предупреждением; просто нажмите «ОК».

Перегружать смартфон для активации этого режима не нужно.

Что делать, если нужный раздел не виден?

Отладка программы

В версиях Android, начиная с 4.2.2, режим отладки (как и другие опции разработчика) не показывается в меню. Однако есть способ легко открыть их:

  • Откройте меню настроек и вкладку «Общие»
  • Найдите раздел «Об устройстве»
  • Откройте в нём пункт «Сведения о ПО»
  • Найдите в нём строку «Номер сборки» и тапните на ней 7 раз
  • После того, как появится уведомление о получении статуса разработчика, вернитесь в раздел «Общие»
  • Найдите в нём появившийся пункт «Опции разработчика»
  • Найдите в этом разделе строку «Отладка USB» и поставьте там галочку
  • Выйдите из меню

Поздравляем, теперь вы имеете доступ к своему устройству через компьютер!

Как вы используете Android USB отладки?

Мы ознакомились с тем, что делает отладка USB и для чего вы можете ее использовать. Таким образом, эта функция позволяет передавать расширенные команды на устройство при подключении телефона к ПК. Отладка по USB жизненно важна для разработчиков, но все же содержит некоторые полезные приемы для опытных пользователей. Хотя вы можете включить его, когда это необходимо, мы рекомендуем отключать его, когда вы его не используете. Это повысит безопасность вашего устройства.

Если вы ищете более полезную информацию, связанную с USB, для своего телефона Android, обязательно посмотрите интересные способы использования USB OTG на вашем телефоне Android.

Что такое USB OTG? 5 крутых способов использовать его на Android

Что такое USB OTG? 5 крутых способов использовать его на AndroidЧто такое USB OTG и как вы можете использовать его на Android? Мы объясняем эту функцию и множество способов ее использования.
Прочитайте больше
,

Кредит изображения: caluian.daniel / Depositphotos

Узнайте больше о настройке Android, Android Tips,.

Установка приложения для отладки по USB

Для отладки используется программа ADB являющаяся составной частью SDK, который нужно скачать и установить.

Скачивается обычно zip архив с Android SDK, и в нем находится папка adt-bundle-windows-x86_64, которая и содержит сам SDK.

Распаковываем ее на компьютер. Например, вы разместили папку в корне диска С, т.е. путь к SDK будет такой: C:\adt-bundle-windows-x86_64.

Убеждаемся, что компьютер подключен к интернету и запускаем находящуюся в папке adt-bundle-windows-x86_64 — программу SDK Manager.

Если не запускается, установите Java SE. После запуска программы SDK Manager появится окно установки. Вам нужно скачать и установить

  1. ✓ Android SDK Platform-tools
  2. ✓ Android SDK Tools
  3. ✓ Пакет Google Usb Driver

Отмечаем эти три пункта в списке и снимаем отметку со всех остальных. Нажимаем «Install» и ждем пока программа скачает компоненты.

Драйверы USB для 32 и 64 разрядной Windows будут скачаны в папку C:\adt-bundle-windows-x86_64\extras\google\usb_driver (установите их позже, если не найдете официальных драйверов для вашего планшета или смартфона).

Подключаем свое устройство к компьютеру — компьютер обнаружит новое оборудование.

Устанавливаем драйверы с сайта производителя или из папки, куда они были скачаны ранее (установка производится через Диспетчер задач> *Неизвестное устройство*> правая кнопка мыши> Update Driver Software> искать драйвер на ПК> скачанные драйверы).

После установки драйверов, в диспетчере устройств появится новое устройство «ADB Interface».

Если устройство не определилось в диспетчере как ADB Interface, проверьте драйверы планшета или смартфона, выключите и включите режим отладки по USB, переподключите устройство к ПК.

Работать с программой ADB лучше всего через командную строку Windows. Для вызова командной строки нажимаем «Пуск», и в поле поиска набираем cmd, нажимаем «Enter».

Чтобы посмотреть, какие устройства подключены к компьютеру, набираем команду:

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

Введите первую команду:

В командной строке начнется отображение лога вашего смартфона или планшета.

Остановите лог, нажав Ctrl+C и введите вторую команду:

Запустите приложение i3 pro на вашем планшете или смартфоне, запустите лог (первая команда), выполните действие, лог которого хотите сохранить, остановите логирование, нажав Ctrl+C.

Сохраненный лог вы можете отправить в техническую поддержку, сопроводив его вашим проектом, описанием проблемы, моделью и версией прошивки планшета или смартфона, на котором обнаружена проблема.

Как включить режим отладки по USB на своём устройстве

Опция «Включить отладку по USB» находится в «Меню для разработчиков» (либо «Параметры разработчика»), которое бывает скрыто от пользователей в версиях Android выше 4.2. Но, опять же, некоторые производители решают открыть доступ к меню, другие — скрыть. Например, на смартфонах компании Meizu меню разработчиков открыто всегда и находится в разделе «Специальные возможности», а на устройствах Samsung доступ к меню закрыт. Всё зависит не только от компании, но и от конкретной модели устройства. 

Итак, если доступ к меню для разработчиков закрыт на вашем устройстве, сделайте следующие действия: в настройках устройства откройте вкладку «Об устройстве» и нажимайте на пункт «Номер сборки» до тех пор, пока не появится уведомление о том, что вам присвоен статус разработчика и вы можете использовать специальное меню.

Теперь зайдите в это меню. В зависимости от модели, вход в меню может располагаться в разных разделах меню настроек. Либо в настройках устройства может сразу же находиться раздел «Для разработчиков» («Параметры разработчика», «Меню разработчика»), либо он может быть подразделом пунктов «Специальные возможности», «Другое», «Ещё», «Дополнительные настройки».

Когда войдёте в меню для разработчиков, отмечайте галочкой пункт «Включить отладку по USB» (либо «Режим отладки по USB»). Обычно этот пункт стоит первым.

Как включить режим отладки по USB, если это невозможно сделать с устройства

Есть способы включить режим отладки даже, если это невозможно сделать на самом устройстве из-за, например, неработающего экрана, сломанного тачскрина, неполадок с устройством в целом.

Главное условие: на вашем устройстве уже должно быть установлено стороннее Recovery — CWM или TWRP. Это необходимо, чтобы была возможность получить полный root-доступ к операционной системе.

  1. Для начала необходимо скачать Android-менеджер qtADB-cwm-edition и установить его в корневой каталог системного диска.
  2. Затем скачайте третью версию реляционной базы данных SQLite, создайте папку SQlite3_Windows в корневом каталоге системного диска и установите туда скачанную базу данных.
  3. Затем включите режим Recovery Mode на своём устройстве и подсоедините к персональному компьютеру.
  4. Откройте исполнительный файл Android-менеджера QtADB.exe. Возможно, программа попросит указать путь к adb.ext, сделайте это и нажимайте ОК.
  5. Нажмите кнопку Advanced. Убедитесь, что раздел Data смонтирован верно.
  6. Нажмите кнопку «Файлы». В левой панели откройте созданную ранее папку SQLite3_Windows, в правой панели откройте папку с адресом /data/data/com.android.providers.settings/databases/, а затем переместите файл settings.db из папки database в папку SQLite3_Windows.
  7. Включите командную строку Windows (cmd.exe, включить можно с помощью комбинации клавиш Win + R).
  8. В командной строке введите следующие команды (вписывайте без кавычек; после ввода каждой нажимайте кнопку Enter):
    1. «cd C:\Sqlite3_Windows»
    2. «sqlite3 settings.db»
    3. «update secure set value=1 where name=’adb_enabled’»
    4. «.quit»
  9. Вновь переключаемся на окно QtADB, перетаскиваем settings.db обратно, перезаписываем файл. 
  10. Перезагружаем устройство
  11. Готово.

После перезагрузки с вашим смартфоном или планшетом можно будет работать с помощью QtADB, MyPhoneExplorer, ADB и других подобных программ. То есть, с помощью режима отладки по USB.

Команда «Шаг с обходом»

Как и команда «Шаг с заходом», команда «Шаг с обходом» (англ. «Step over») позволяет выполнить следующую строку кода. Только если этой строкой является вызов функции, то «Шаг с обходом» выполнит весь код функции в одно нажатие и возвратит нам контроль после того, как функция будет выполнена.

Примечание для пользователей Code::Blocks: Команда «Step over» называется «Next Line».

Рассмотрим пример, используя следующую программу:

#include <iostream>

void printValue(int nValue)
{
std::cout << nValue;
}

int main()
{
printValue(5);
return 0;
}

1
2
3
4
5
6
7
8
9
10
11
12

#include <iostream>

voidprintValue(intnValue)

{

std::cout<<nValue;

}

intmain()

{

printValue(5);

return;

}

Нажмите «Шаг с заходом», чтобы дойти до вызова функции printValue():

Отладка программы

Теперь вместо команды «Шаг с заходом» выберите «Шаг с обходом» (или F10):

Отладка программы

Отладчик выполнит функцию (которая выведет значение в консоль), а затем возвратит нам управление на строке . И это всё за одно нажатие.

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

Место отладки в цикле разработки программы

Типичный цикл разработки, за время жизни программы многократно повторяющийся, выглядит примерно так:

  1. Программирование — внесение в программу новой функциональности, исправление существующих ошибок.
  2. Тестирование (ручное или автоматизированное; программистом, тестером или пользователем; «дымовое», в режиме чёрного ящика или модульное…) — обнаружение факта ошибки.
  3. Воспроизведение ошибки — выяснение условий, при которых ошибка случается. Это может оказаться непростой задачей при программировании параллельных процессов и при некоторых необычных ошибках, известных как гейзенбаги.
  4. Отладка — обнаружение причины ошибки.

Точки останова

Точка останова — это некая точка в программном модуле, на которой выполнение модуля приостанавливается и управление перехватывает отладчик. Точку останова можно установить с любой строке модуля и в любой момент работы с отладчиком. Место установки точки останова отмечается соответствующим знаком, для разных видов точек останова используются разные обозначения:

Отладка программыВиды точек останова

Работе с точками останова посвящена секция меню «Отладка»:

  • Точка останова (F9) — устанавливает/удаляет точку останова в строке на которой стоит курсор;
  • Точка останова с условием — устанавливает точку останова и открывает окно для ввода условия — логического выражения, повторное использование команды в этой же  строке откроет окно для редактирования условия. Останов в указанной точке будет выполнен только если условие истинно;
  • Включить/отключить точку останова (Ctrl+Shift+F9) — включает/отключает точку останова;
  • Удалить все точки останова — удаляет все точки останова во всех модулях;
  • Отключить все точки останова — отключает все точки останова во всех модулях;
  • Список точек останова (Alt+F9) — открывает окно для просмотра и управления точками останова, о нем ниже.

Отладка программыТочка останова с условием

Кроме этого пункт меню «Отладка» — «Остановка по ошибке…» также можно отнести к работе с точками останова, так как эта команда позволяет останавливать выполнение кода при возникновении ошибки и переходит к строке которая вызвала ошибку.

Команда «Список точек останова» (Alt+F9) открывает окно для просмотра и управления точками останова:

Отладка программыОкно «Точки останова»

В окне показаны все точки останова во всех модулях, их расположение (модуль и номер строки) и условие (если есть). Имеется возможность включить/отключить/удалить точки останова, перейти к месту установки точек останова, сохранить и загрузить список точек останова.

Навигация по кодуNavigate code

Чтобы продолжить работу отладчика, можно использовать различные команды.There are different commands to instruct the debugger to continue. Здесь описываются полезные новые команды для навигации по коду, доступные с версии Visual Studio 2017.We show a useful code navigation command that is available starting in Visual Studio 2017.

Если выполнение приостановлено в точке останова, наведите указатель мыши на инструкцию и дождитесь, пока появится зеленая кнопка Выполнение до щелкнутого, после чего нажмите кнопку Выполнение до щелкнутого.While paused at the breakpoint, hover over the statement until the green Run to click button appears, and then press the Run to click button.

Отладка программы

Выполнение приложения продолжится путем вызова и будет приостановлено в той строке, в которой вы нажмете эту кнопку.The app continues execution, calling , and pauses on the line of code where you clicked the button.

В процессе пошагового выполнения кода обычно используются клавиши F10 и F11.Common keyboard commands used to step through code include F10 and F11. Более подробные инструкции см. в статье Знакомство с отладчиком Visual Studio.For more in-depth instructions, see First look at the debugger.

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

Из этой статьи вы узнали общие принципы отладки приложений.In this article, you’ve learned a few general debugging concepts. Теперь вы можете приступить к знакомству с процессом отладки в Visual Studio и написанию кода с меньшим количеством ошибок.Next, you can start learning how to debug with Visual Studio and how to write code with less bugs. В следующих статьях приводятся примеры кода на C#, но основные понятия применимы ко всем языкам, поддерживаемым средой Visual Studio.The following articles show C# code examples, but the concepts apply to all languages supported by Visual Studio.

Безопасность программного кода и отладка

В программном коде может быть так называемое недокументированное поведение — серьёзные ошибки, которые не проявляются при нормальном ходе выполнения программы, однако весьма опасны для безопасности всей системы в случае целенаправленной атаки. Чаще всего это результат ошибок программиста. Наиболее известные примеры — это SQL-инъекция и переполнение буфера. В данном случае задача отладки это:

  • Выявление недокументированного поведения системы
  • Устранение небезопасного кода

Выделяют такие методы:

  • статический анализ кода. На этой фазе программа сканер ищет последовательности в исходном тексте, соответствующие небезопасным вызовам функций и т. д. Фактически идет сканирование исходного текста программы на основе специальной базы правил, которая содержит описание небезопасных образцов кода.
  • фаззинг. Это процесс подачи на вход программы случайных или некорректных данных и анализ реакции программы.
  • Reverse engineering (Обратная инженерия). Этот случай возникает, когда независимые исследователи ищут уязвимости и недокументированные возможности программы.

Команда «Шаг с заходом»

Команда «Шаг с заходом» (англ. «Step into») выполняет следующую строку кода. Если этой строкой является вызов функции, то «Шаг с заходом» открывает функцию и выполнение переносится в начало этой функции.

Давайте рассмотрим очень простую программу:

#include <iostream>

void printValue(int nValue)
{
std::cout << nValue;
}

int main()
{
printValue(5);
return 0;
}

1
2
3
4
5
6
7
8
9
10
11
12

#include <iostream>

voidprintValue(intnValue)

{

std::cout<<nValue;

}

intmain()

{

printValue(5);

return;

}

Как вы уже знаете, при запуске программы выполнение начинается с вызова главной функции main(). Так как мы хотим выполнить отладку внутри функции main(), то давайте начнем с использования команды «Шаг с заходом».

В Visual Studio, перейдите в меню (либо нажмите ):

Отладка программы

Если вы используете другую IDE, то найдите в меню команду и выберите её.

Когда вы это сделаете, должны произойти две вещи. Во-первых, так как наше приложение является консольной программой, то должно открыться консольное окно. Оно будет пустым, так как мы еще ничего не выводили. Во-вторых, вы должны увидеть специальный маркер слева возле открывающей скобки функции main(). В Visual Studio этим маркером является жёлтая стрелочка (если вы используете другую IDE, то должно появиться что-нибудь похожее):

Отладка программы

Стрелка-маркер указывает на следующую строку, которая будет выполняться. В этом случае отладчик говорит нам, что следующей строкой, которая будет выполняться, — будет открывающая фигурная скобка функции main(). Выберите «Шаг с заходом» еще раз — стрелка переместится на следующую строку:

Отладка программы

Это значит, что следующей строкой, которая будет выполняться, — будет вызов функции printValue(). Выберите «Шаг с заходом» еще раз. Поскольку printValue() — это вызов функции, то мы переместимся в начало функции printValue():

Отладка программы

Выберите еще раз «Шаг с заходом» для выполнения открывающей фигурной скобки printValue(). Стрелка будет указывать на .

Теперь выберите «Шаг с обходом» (F10). Вы увидите число в консольном окне.

Выберите «Шаг с заходом» еще раз для выполнения закрывающей фигурной скобки printValue(). Функция printValue() завершит свое выполнение и стрелка переместиться в функцию main()

Обратите внимание, в main() стрелка снова будет указывать на вызов printValue():

Отладка программы

Может показаться, будто отладчик намеревается еще раз повторить цикл с функцией printValue(), но в действительности он нам просто сообщает, что он только что вернулся из этой функции.

Выберите «Шаг с заходом» два раза. Готово, все строки кода выполнены. Некоторые дебаггеры автоматически прекращают сеанс отладки в этой точке. Но Visual Studio так не делает, так что если вы используете Visual Studio, то выберите (или ):

Отладка программы

Таким образом мы полностью остановили сеанс отладки нашей программы.