Шрифт:
Чтобы объяснить следующую команду отладки, стоит поговорить про стек вызовов. Стеком называется хранилище неких сущностей, из которого сущности могут быть извлечены в порядке обратном их помещению в стек. Если вы когда-нибудь слышали про LIFO – это и есть стек.
Стеком вызовов называется цепочка вызовов подпрограмм, которые привели нас в текущее место программы. При этом на вершине стека располагается текущая выполняемая подпрограмма, а на его дне – то место, откуда началось выполнение. При вызове подпрограммы она помещается на вершину стека и становится текущей. При выходе из текущей подпрограммы она удаляется из стека и на вершине оказывается та подпрограмма, из которой была вызвана текущая, и, таким образом, сама становится текущей.
Для нас сейчас важно, что мы можем дать команду выполнить текущую подпрограмму до конца и выйти из нее. При этом программа остановится, и мы окажемся в отладчике на операторе, следующем за вызовом той подпрограммы, из которой мы вышли. Такая команда называется «Возврат» и назначена на клавишу F7 (и также присутствует в меню и панели инструментов). Очень полезно если вы случайно провалились в подпрограмму по F5, поняли, что хотели нажать F6 и Вам тут не интересно, и хотите вернуться. Кнопка для этой команды выглядит так
Следующая команда «Дальше» сама простая – она запускает программу с текущего места в обычном режиме. Программа остановится только в точке прерывания, о типах которой поговорим ниже, либо отработает полностью и завершится. Команда назначена на клавишу F8. В классическом (старом) отладчике эта команда объединена со следующей. Кнопка выглядит следующим образом
Команда «Выполнить до курсора» – запускает программу и заставляет ее остановиться в месте, на котором установлен курсор. Если курсор установлен не в текущей подпрограмме или выше текущей команды – поведение аналогично команде «Дальше». В новом отладчике команда назначена на сочетание клавиш Shift+F8. В классическом отладчике, эта команда объединена с предыдущей – при ее вызове, если в процессе выполнения программы будет достигнуто место, на котором установлен курсор, программа остановится, и вы окажетесь в отладчике. Иначе программа будет выполнена до конца или до точки прерывания.
Еще одна команда «Перейти к оператору» позволяет переходить на любой оператор текущей подпрограммы без выполнения команд между ним и текущим оператором, на котором остановлена программа. Эта команда позволяет, как переходить вперед, например, пропуская какие-либо проверки, так и возвращаться назад, повторяя отдельные части подпрограммы. Для перехода необходимо установить курсор в тексте программы на нужное место и дать эту команду. В новом отладчике она назначена на сочетание клавиш Shift+F12. В классическом отладчике вызывается только через меню.
В классическом отладчике есть еще одна команда «Выполнить PAI– /PBO– модуль». По этой команде возобновляется обычная работа программы как при команде «Дальше». Но как только начинает выполняться PAI или PBO логика экрана – программа вновь останавливается, и Вы попадаете в отладчик.
Кроме команд управления отладкой есть две команды для ее прекращения. При этом первая отключает отладку, и работа программы продолжается в обычном режиме. Вторая отключает отладку и прерывает дальнейшее выполнение программы. Данные команды в новом отладчике называются «Завершить работу» и «Выход из приложения и отладчика», а в старом «Выключить отладку» и «Перезапуск», соответственно. Отключить отладку и прекратить выполнение программы также можно стандартными кнопками выхода и отмены на панели инструментов.
Точки прерывания
Точкой прерывания (breakpoint) называется место в программе, достигнув которого программа остановится и будет открыта в отладчике. Смысл существования точки прерывания заключается в ускорении процесса отладки. Например, если Вы знаете место, в котором возникает ошибка, но пока не понимаете почему, Вам нужно остановить выполнение программы и проанализировать данные, которые «придут» в это место. В этом случае вместо того, чтобы по шагам идти по всей программе до нужного кода, вы можете установить в нем точку прерывания и запустить программу в обычном режиме. Когда точка будет достигнута – программа остановится, и Вы окажетесь в отладчике.
Точки прерывания могут быть различных типов. Самой простой точкой является точка прерывания сеанса (Session BP). Такая точка устанавливается в редакторе кода с помощью пункта меню Утилиты– Точки прерывания-Установить/Удалить. При этом в строке с курсором слева появится соответствующая иконка – вот такая
которая как раз говорит, что в этой строке установлена точка прерывания. Кроме появления иконки, о наличии точки прерывания будет сигнализировать подсвеченная темно-красным строка. Также точку можно поставить, нажав комбинацию клавиш Ctrl+Shift+F12, нажав кнопку в панели инструментов или кликнув мышью на сером поле слева (там, где появилась иконка). Снять точку прерывания можно, выполнив те же действия, что и при ее установке. Установленные таким способом точки прерывания будут работать в течение всего сеанса работы пользователя, установившего точку, пока он не удалит ее. После выхода из системы (манданта) сеанс прерывается и точки теряются.
Разновидностью точки прерывания сеанса является точка прерывания отладчика (Debugger BP). Такую точку можно установить, только находясь непосредственно в отладчике. Точка устанавливается с помощью пункта меню Точки прерывания-Точка прерывания строк-Установить/Удалить или клавишей F9 (в старом отладчике – Точки прерывания-Установить/Удалить или комбинацией Shift+F4). Также можно кликнуть мышью на сером поле, а в новом отладчике – на кнопку в панели инструментов