Вы находитесь на странице: 1из 38

ABAP Debugger Toolkit Tutorial

Учебное пособие по ABAP-


отладчику
This tutorial is aimed on beginner ABAP developers, SAP ERP consultants and students who want
to learn functional abilities of the standard ABAP developer tool — of the ABAP debugger. This
tutorial contains sequences of actions needed to solve practical problems that arise during a
development or analysis of ABAP programs. The tutorial is written in the Russian language. Source
code of programs that were specially created for this tutorial are placed in Appendix A. Hyperlinks
starting with file:///C:/ABAP_DOCU_HTML points to a downloaded copy of official documentation, see
also Appendix B.

Данное учебное пособие предназначено для начинающих разработчиков ABAP,


консультантов SAP ERP и студентов, желающих изучить функциональные возможности
стандартного инструмента ABAP-разработчика — ABAP-отладчика. В пособии излагаются
последовательности действий по решению практических задач, встающих при разработке и
анализе ABAP-программ. Пособие написано на русском языке. В приложении А приведены
исходные тексты использованных программ, написанных специально для этого пособия.
Гиперссылки, начинающиеся с file:///C:/ABAP_DOCU_HTML указывают на выгруженную из
системы SAP ERP копию официальной документации, подробнее см. Приложение Б.

Содержимое (Table of Contents)


Немного теории и информация о версии и настройках....................................................................4
Вход в систему. Клиент и сервер, сеанс, окно, экран..................................................................4
Вход в отладчик и его настройка...................................................................................................6
Внешний вид отладчика, инструменты вкладки «Стандарт» и план рассмотрения.....................11
Кнопки общей части экрана отладчика (F5, F6, F7, F8…)..........................................................12
Упражнение №1 «Проход по программе в отладчике через F5»..............................................12
Упражнение №2 «Проход по программе в отладчике через F6–F8»........................................13
Пояснение о программных инструкциях, модулях и инклюдах.................................................13
Информация о прерванной программе в общей части экрана отладчика...............................15
Вкладка «Стандарт», список инструментов и план по их рассмотрению.................................17
Упражнение №3 «Базовая информация о месте прерывания»................................................17
Упражнение №4 «Отладка обычная, отладка логики экрана»..................................................18
Упражнение №5 «Системные переменные»..............................................................................18
Базовый просмотр состояния программных объектов...................................................................19
Инструмент «Исходный текст» (“Source Code”)..........................................................................19
Упражнение №6 «Значения переменных во всплывающих подсказках».................................20
Инструмент «Быстрый просмотр переменной» (“Variable Fast Display”)..................................21
Упражнение №7. «Быстрый просмотр переменных».................................................................22
Упражнение №8 «Изменение значений у переменных»............................................................23
Инструмент «Вызов/пакет» (стек вызовов, “Call Stack”)............................................................25
Упражнение №9 «Стек вызовов»................................................................................................27
Инструмент “DiffTool”, сравнение переменных и строк таблицы...............................................27
Управление выполнением программы............................................................................................28
Инструмент «Точки прерывания» (“Breakpoints”).......................................................................28
Точки прерывания: три вида (отладчика, сеанса, внешняя).....................................................28
Точка прерывания на ключевое слово инструкции (MESSAGE, etc)........................................28
Пропуски к точкам прерывания...................................................................................................28
Точки наблюдения........................................................................................................................ 28
Переход к оператору (Goto Statement инструмента «Исходный текст»)..................................28
Изменение значения переменной/параметра............................................................................28
Запуск отладчика.............................................................................................................................. 29
Обычный запуск: точка останова или команда /h.......................................................................29
Попадание в отладчик из динамической ошибки (из «дампа»).................................................29
Запуск отладчика для всплывающего окна (/h через ярлык в SAP Logon)...............................29
Запуск отладки неактивных фоновых заданий: SM37 + команда JDBG...................................29
Запуск отладки активных фоновых заданий: SM50...................................................................29
Запуск отладки активных диалоговых процессов: SM50...........................................................29
Запуск отладки RFC: SM50..........................................................................................................29
Продвинутый просмотр: расход памяти, memories….....................................................................30
Инструмент «Анализ памяти» (“Memory Analysis”).....................................................................30
Инструмент «Системные области (внутр.)» (“System Areas (Internal)”)....................................30
Просмотр расходуемой памяти...................................................................................................30
Просмотр memories...................................................................................................................... 30
Просмотр инструмента работы с SAP и ABAP памятью............................................................30
Просмотр последовательности байтов в виде xml и преобразования в текстовый вид
средствами отладчика.................................................................................................................30
Инструмент «Загруж. программы» (глоб. данные)» (“Loaded Programs (Global Data)”)...........30
Assign глобальных данных из другой программы......................................................................30
Новые возможности отладчика в 7.5...............................................................................................31
Новые настройки.......................................................................................................................... 32
Новая кнопка Step Size................................................................................................................ 32
Новые кнопки Last Exception Object и Display Trigger Location..................................................32
Новая кнопка Configure Debugger Layer......................................................................................32
Новая вкладка Script (инструмент Debugger Scripting)...............................................................32
Новые инструменты..................................................................................................................... 33
Новое в уже существовавших инструментах..............................................................................33
Приложение А «Исходные тексты программ в формате NUGG»..................................................35
Приложение Б «Сценарии взаимодействия с SAP ERP»...............................................................36
Вход в систему SAP ERP............................................................................................................. 36
Запуск транзакции........................................................................................................................ 36
Просмотр документации.............................................................................................................. 36
Выгрузка копии документации из системы SAP ERP в виде веб-страниц................................36
Просмотр исходного текста программы с известным названием в ABAP-редакторе..............37
Запуск программы с известным названием на выполнение......................................................37
Запуск программы с известным названием в отладчике...........................................................37
Просмотр исходного текста программы из отладчика...............................................................37
Прерывание программы на отладчик на любом ее экране командой /h..................................37
Создание ярлыка в SAP Logon для команд /h............................................................................37
Прерывание программы со всплывающего окна через ярлык /h..............................................38
Переход в отладчик из сообщения о динамической ошибке (о «дампе»)................................38
Переход в отладчик из SM37.......................................................................................................38
Переход в отладчик из SM50.......................................................................................................38

Рисунки (Pictures)
Рис. 1. Информация о системе версии ECC 6.0 (Система  Статус).............................................4
Рис. 2. Трехсистемный ландшафт SAP ERP в окне входа SAP Logon (SAP GUI for Windows).....5
Рис. 3. Окно входа на русском в первый сеанс системы разработки (Development System).........5
Рис. 4. Меню для работы с окном, открывается по Alt+Space (с 1985 года в ОС Windows)..........5
Рис. 5. Окно SAP GUI, его экран и другие компоненты....................................................................6
Рис. 6. Вход в отладчик — команда /h...............................................................................................7
Рис. 7. Переключение на новый отладчик из старого (классического) и наоборот........................7
Рис. 8. Окно с новым отладчиком поверх окна с первым экраном транзакции SE11.....................8
Рис. 9. Переход к настройкам отладчика..........................................................................................8
Рис. 10. Отладчик: параметры настройки.........................................................................................9
Рис. 11. Отладчик: опции. Вкладка №1 Общее.................................................................................9
Рис. 12. Отладчик: опции. Вкладка №2 Вызов/пакет — поставить ABAP and Screen (как в 7.5)...9
Рис. 13. Отладчик: опции. Вкладка №3 Быстрый просмотр переменной......................................10
стр. 2
Рис. 14. Выход из отладчика............................................................................................................10
Рис. 15. Окно с экраном отладчика, где открыта вкладка «Стандарт» с тремя инструментами. 11
Рис. 16. Верхняя, общая часть экрана отладчика, не зависящая от наборов инструментов......12
Рис. 17. Кнопки общей части экрана отладчика..............................................................................12
Рис. 18. Подсказки к иконкам общей части экрана отладчика, в двух режимах...........................15
Рис. 19. Список всех инструментов отладчика в системе версии ECC 6.0...................................17
Рис. 20. Три инструмента вкладки «Стандарт»..............................................................................19
Рис. 21. Инструмент «Исходный текст» крупно..............................................................................19
Рис. 22. Инструмент «Вызов/пакет» (стек вызовов).......................................................................25
Рис. 23. Исправленный баг со стрелкой в стеке вызовов в системе 7.5.......................................25
Рис. 24. Глобальная настройка Stack Type в инструменте «Вызов/пакет» (“Call Stack”).............26
Рис. 25. Локальная настройка Stack Type в инструменте «Вызов/пакет» (“Call Stack”)...............26
Рис. 24. Ошибка при попытке навигации к экранному модулю в стеке вызовов..........................27
Рис. 25. Информация о системе BDR версии NetWeaver 7.5 (СистемаСтатус)........................31
Рис. 26. Один из советов по использованию новинок отладчика в 7.5.........................................31
Рис. 27. Отладчик в 7.5: параметры настройки...............................................................................32
Рис. 28. Сравнение списка инструментов отладчика в 6.0 и в 7.5.................................................33
Рис. 29. Просмотр таблиц в новом отладчике снабжен кнопками Key/Indexes и Columns..........33

Таблицы (Tables)
No table of figures entries found.

стр. 3
Немного теории и информация о версии и настройках
Английский глагол to debug дословно переводится как «убрать жука», а существительное
debugger — как «убиратель жуков». В вычислительной технике применяется примерно с
середины XX века, когда электронные вычислительные машины были большими настолько,
что обычные жуки могли заползти в их электрические цепи и вызвать короткое замыкание.
Ремонт физически сломавшейся ЭВМ включал в себя удаление несчастных жуков. Термин
перешел и на починку программ для ЭВМ, ошибки в которых как жуки в электрических схемах
приводят к неверной работе ЭВМ.
Ошибки с тех пор называют багами. Дебаггерами же называют инструменты, помогающие
найти ошибки в программе. По-русски это отладчики. В основном с помощью отладчика
человек прерывает выполнение программы, чтобы посмотреть на состояние обрабатываемых
ею программных объектов и сверить его с ожидаемым.
Для систем SAP ERP существуют два отладчика, старый и, примерно с 2004 года, новый.
Пособие составлено на базе нового ABAP-отладчика в системе SAP ERP версии ECC 6.0, где
язык ABAP имеет версию 7.01. Все примеры сделаны так, чтобы их можно было повторить и в
системе для обучения на базе SAP NetWeaver 7.52 SP04. В этой системе используется ABAP
версии 7.54, новый отладчик обладает более широким перечнем возможностей (см. раздел
«Новые возможности отладчика в 7.5»).

Рис. 1. Информация о системе версии ECC 6.0 (Система  Статус)


Официальная документация по новому отладчику на английском языке доступна онлайн —
см. New ABAP Debugger в разделе ABAP Test and Analysis Tools на сайте help.sap.com.
Вход в систему. Клиент и сервер, сеанс, окно, экран
В этом пособии под SAP ERP имеется в виду SAP-система, построенная на платформе SAP
NetWeaver и ее сервере ABAP-приложений (SAP NetWeaver Application Server ABAP).
Подробнее см. по ссылкам:
1) https://help.sap.com/viewer/product/SAP_NETWEAVER/ALL/en-US,
2) file:///C:/ABAP_DOCU_HTML/ABENABAP_OVERVIEW.htm
В реальной жизни обычно три системы SAP ERP собираются в один ландшафт и
используются для отделенных друг от друга разработки, тестирования и промышленной
эксплуатации в рамках одного клиента корпорации SAP — например, автозавода.
Каждая система SAP ERP разделена на три уровня:
1. Уровень презентации — компьютер пользователя.
2. Уровень приложений — сервер приложений SAP NetWeaver.
3. Уровень базы данных — сервер базы данных.
Обычно пользователь работает с SAP ERP в операционной системе Windows через
приложение SAP GUI, которое является клиентом для сервера приложений SAP NetWeaver.
SAP GUI предоставляет каждому пользователю максимум шесть одновременно открытых
сеансов с сервером приложений. Первый сеанс в любой системе открывается через
аутентификацию пользователя на сервере приложений через Windows-приложение SAP Logon
(это SAP GUI для Windows, частный случай более общего понятия SAP GUI).
В данном пособии предполагается, что вход произведен на русском языке, в систему
разработки.

стр. 4
Рис. 2. Трехсистемный ландшафт SAP ERP в окне входа SAP Logon (SAP GUI for Windows)

Рис. 3. Окно входа на русском в первый сеанс системы разработки (Development System)
Каждому сеансу соответствует одно окно. В окне отображается текущий экран какой-либо
ABAP-программы. У программы может быть несколько экранов, они сменяют друг друга
последовательно, в рамках одного окна. На экране могут быть подэкраны, которые могут быть
организованы во вкладки. Отличить окно от экрана можно так:
1) У окна справа сверху есть кнопки «Свернуть», «Развернуть» и «Закрыть» ( ).
2) Окно можно перетаскивать, ухватив левой кнопкой мыши за его верхнюю часть
(например, правее пункта меню «Справка» и левее кнопки «Свернуть»).
3) У окна слева вверху есть иконка , по нажатию на которую открывается меню для
работы с этим окном и для открытия еще одного окна («режима») по соседству.

Рис. 4. Меню для работы с окном, открывается по Alt+Space (с 1985 года в ОС Windows)

стр. 5
Рис. 5. Окно SAP GUI, его экран и другие компоненты
На рисунке выше окно обозначено зеленой рамкой, а экран — оранжевой. Кроме экрана в
окне присутствуют следующие компоненты (сверху вниз):
1) Строка меню (menu bar) — рамка коричневого цвета.
2) Строка стандартных кнопок и поле для ввода команд (standard toolbar) — желтая рамка.
3) Строка заголовка (title bar) — синяя рамка.
4) Строка кнопок приложения (application toolbar) — фиолетовая рамка.
5) Строка статуса (status bar) — голубая рамка.
Открыть новый сеанс дополнительно к первому можно следующими способами:
1) нажать на иконку «Открыть режим» в строке стандартных кнопок;
2) ввести команду /o (слэш, о) в поле для ввода команд в строке стандартных кнопок;
3) щелкнуть левой кнопкой мыши на иконку слева вверху и выбрать «Открыть режим»;
4) нажать комбинацию клавиш Alt+Space и выбрать «Открыть режим».

Вход в отладчик и его настройка


Откройте новый сеанс в SAP ERP и запустите транзакцию SE11, введя в поле
команд /nSE11. Затем в поле команды введите /h. В строке статуса появится зеленое
сообщение «Отладка включена». Введите название таблицы SFLIGHT и нажмите кнопку
«Просмотр».

стр. 6
Рис. 6. Вход в отладчик — команда /h
Обычное выполнение программы, запущенной транзакцией SE11, прервется и вместо
обычного экрана просмотра свойств таблицы, т.е. второго экрана этой транзакции, откроется
экран отладчика. В зависимости от настроек отладчик будет либо старый, либо новый. Старый
нам не нужен, переключимся на новый через верхнее меню: «ОтладкаПереключение на
новый ABAP-отладчик».

Рис. 7. Переключение на новый отладчик из старого (классического) и наоборот


Новый отладчик удобен уже потому, что он открывается в отдельном окне (сеансе), то есть
за ним можно увидеть окно, с которого он был открыт. В данном случае – это окно с первым
экраном транзакции SE11. В списке открытых сеансов видно и отладчик, и SE11.

стр. 7
Рис. 8. Окно с новым отладчиком поверх окна с первым экраном транзакции SE11
Далее под отладчиком я буду иметь в виду новый ABAP-отладчик. Зайдем в настройки
отладчика и выставим их так, как они были выставлены при составлении этого пособия.

Рис. 9. Переход к настройкам отладчика


Переключатель «Отладка системы» должен быть отключен. Сделать это можно либо через
первый из трех пунктов меню в пункте «Параметры настройки», либо через галочку во втором
пункте. В этом втором пункте «Параметры настройки» нужно также отключить Update
Debugging, TRFC (In Background Task): Block Sending, Always Create Exception Obj., включить
Close Debugger After ‘Continue’(F8) and Roll Area End, Autmatically Copy Session BPs.

стр. 8
Рис. 10. Отладчик: параметры настройки
Нажмите кнопку с дискетой внизу для сохранения настроек. Перейдите к третьему пункту. В
третьем пункте «Опции» есть три вкладки. Настройки на рисунках ниже.

Рис. 11. Отладчик: опции. Вкладка №1 Общее

Рис. 12. Отладчик: опции. Вкладка №2 Вызов/пакет — поставить ABAP and Screen (как в 7.5)

стр. 9
Рис. 13. Отладчик: опции. Вкладка №3 Быстрый просмотр переменной
Сохраните настройки нажатием на кнопку с дискетой внизу. Более подробное рассмотрение
того, на что влияют настройки, смотри ниже.
Выйдите из отладчика через меню «ОтладчикЗавершить работу отладчика» или через
меню «ОтладчикДальше F8».

Рис. 14. Выход из отладчика


Отладчик закроется, выполнение прерванной на отладку программы продолжится и
откроется давно запрошенный второй экран транзакции SE11. Выйдите из этой транзакции.

стр. 10
Внешний вид отладчика, инструменты вкладки «Стандарт» и план рассмотрения
На рисунке ниже представлен экран отладчика, занимающий все окно отдельного сеанса SAP ERP.

Рис. 15. Окно с экраном отладчика, где открыта вкладка «Стандарт» с тремя инструментами
На вкладке «Стандарт» три подэкрана с инструментами: слева просмотр исходного текста,
справа вверху стек вызовов, справа внизу просмотр переменных (подробнее о них позже).
Выше вкладок с инструментами расположена общая часть отладчика, не зависящая от них.

Рис. 16. Верхняя, общая часть экрана отладчика, не зависящая от наборов инструментов
В этой общей части всегда указывается информация о прерванной программе, а также
присутствуют семь кнопок.
Кнопки общей части экрана отладчика (F5, F6, F7, F8…)

Рис. 17. Кнопки общей части экрана отладчика


Первые четыре кнопки используются для выполнения инструкций программы по команде от
того, кто использует отладчик, а не в обычном режиме, когда инструкции выполняются друг за
другом согласно логике программы, без прерываний. Минимальный объем инструкций, которые
выполняются за одно нажатие на кнопку — это одна инструкция, по первой кнопке (F5). С
переходом к четвертой кнопке (F8) объем выполняемых за одно нажатие инструкций
возрастает (конкретное число инструкций зависит от конкретной программы).
Кнопки по созданию точек прерывания и точек наблюдения — при их нажатии состояние
программы не изменяется, но в отладчике появляется новый параметр прерывания этой
программы. Подробнее смотри в главе Управление выполнением программы.
Кнопка «Сохранить формат» позволяет сохранить активность вкладок и наборы
инструментов на всех вкладках, то есть их присутствие и взаимное расположение. Параметры
каждого инструмента (ширина столбцов в таблицах, например), к сожалению, не сохраняются.
Упражнение №1 «Проход по программе в отладчике через F5»
Шаг 1. Запустите программу ZTG_DEBUG_01 в отладчике (см. сценарий Запуск программы с
известным названием в отладчике в приложении Б):
- в поле команды укажите /NSE38 и нажмите Enter;
- открывшееся окно ABAP-редактор разместите на левой половине монитора — нажмите
комбинацию клавиш «Windows+Стрелка влево», а затем Escape;
- введите название программы ZTG_DEBUG_01;
- нажмите комбинацию клавиш Shift+F5 или кнопку , или выберите пункт меню
«ПрограммаВыполнитьОтладка (Shift+F5)».
При нажатии этой кнопки «Отладка» всегда открывается окно отладчика.
Шаг 2. Разместите окно отладчика на правой половине монитора — нажмите комбинацию
клавиш «Windows+Стрелка вправо» (Escape нажимать тут уже не нужно, т.к. левая
половина монитора уже занята и Windows не предлагает ее ничем заполнить).
Шаг 3. Обратите внимание, что в окне «ABAP-редактор: первый экран» курсор мыши

принимает вид «Фоновое выполнение» и это окно не активно (кнопки не работают),


а в его статусной строке указано «Session 1 connected to debugger …»; активно же окно
«ABAP-отладчик контролирует сеанс(1)».
Шаг 4. В окне отладчика нажимайте на клавишу F5 (или на кнопку «Отдельный шаг (F5)»),
считая нажатия, до тех пор, пока активным опять не станет левое окно.
Шаг 5. На левом экране нажмите кнопку «Назад» (F3).
Шаг 6. Выйдите из опять ставшего активным отладчика нажатием клавиши F8 или через
пункт меню "Debugger->Continue F8"(«Отладчик -> Дальше F8»).

Вопрос 1. Сколько нажатий клавиши F5 вы насчитали на шаге 4? Ответ оформите в виде


программы ZABAP_L5_Z1_id, которая будет выводить строку такого вида:
Количество нажатий клавиши F5: 18.

В заголовок программы пропишите название упражнения и вашу фамилию в скобках:


Проход по программе в отладчике через F5 (Фамилия)
То же самое нужно будет делать для последующих упражнений.
Упражнение №2 «Проход по программе в отладчике через F6–F8»
Запустите программу ZTG_DEBUG_01 по обычному, без кнопки «Отладчик», как было в
предыдущем упражнении. Т.е.
- в поле команды укажите /NSE38 и нажмите Enter;
- нажмите клавишу F8 или кнопку «Execute (F8)» (третья слева, зеленая галочка и часы).
Так как в программе специально прописана инструкция BREAK-POINT (точка останова), то
выполнение программы будет прервано и откроется новое окно, в котором будет размещен
отладчик — ABAP Debugger.

Шаг 1. Повторите шаги упражнения №1, но на шаге 4 нажимайте клавишу F6 (или


«Выполнить (F6)»). Запишите сосчитанное количество нажатий.
Шаг 2. Аналогично предыдущему шагу повторите подсчет для нажатия клавиши F7 (или
кнопки «Возврат (F7)»).
Шаг 3. Аналогично — для клавиши F8 (или кнопки «Дальше (F8)»).

Вопрос 1. Сравните четыре полученных числа (для F5–F8), расположив их от минимального


к максимальному. Ответ оформите в виде программы ZABAP_L5_Z2_id, которая будет
выводить пять строчек, вот в таком виде:
Клавиша и кол-во ее нажатий до выхода из отладки ZTG_DEBUG_01, по возрастанию:
F7 = 8,
F8 = 13,
F5 = 18,
F6 = 22.

В заголовок программы пропишите название упражнения и вашу фамилию в скобках.


Используйте программу-шаблон (название без _id).

Пояснение о программных инструкциях, модулях и инклюдах


Описание упражнения №1 состоит из шести шагов, написанных на русском языке. Шаги
выполняются по определенному порядку (от первого к шестому) и приводят к определенному
результату — становится известным количество нажатий на клавишу F5. Выполнение
компьютерных программ похоже на выполнение этого упражнения.

Компьютерная программа — это описание порядка действий над данными


для решения определенной задачи.

Если бы некий робот понимал русский язык и мог как человек взаимодействовать с ABAP-
отладчиком, то упражнение №1 было бы записано для него в виде тех же шести шагов. В этом
руководстве отдельный шаг программы буду называть инструкцией, это один из вариантов
перевода английского термина statement (еще переводят как команда или оператор).
Инструкция ABAP — это не инструкция на русском языке, последняя больше похожа на весь
текст упражнения №1, а не на отдельный его шаг.
стр. 13
В общем, отличие программ на ABAP для систем SAP ERP от таких инструкций на русском
языке для людей как упражнение №1 состоит в следующем:
1) программы на ABAP намного длиннее,
2) они состоят из достаточно простых инструкций,
3) в каждой инструкции, за исключением простейших, присутствуют ключевые слова из
строго определенного набора (см. статью ABAP Statements - Overview в документации).
То есть исполнители программ на языке ABAP тупее человека, но могут шустро исполнять
одну за другой множество инструкций (до миллиардов операций в секунду — это те самые
компьютерные гигагерцы).
Так как программы длинные, для облегчения работы по их созданию и сопровождению
логику их выполнения делят на программные модули, желательно независимые друг от
друга. Из таких модулей можно как из деталей конструктора создать несколько разных
программ, под разные задачи. Если модули совсем независимые, то при замене любого из них
соседние не будут затронуты, и вся программная конструкция имеет меньше шансов рухнуть.
В описании упражнения №2 есть ссылка на упражнение №1 — его нужно повторить три
раза, сменяя нажимаемую на четвертом шаге клавишу. Программа по выполнению упражнения
№2 состоит из трех вызовов одного программного модуля «Упражнение №1» в разных
вариантах. То есть, у этого модуля есть параметр, с которым его вызывают: указание на то,
какую клавишу нажимать. Такие параметры называются входными. Выходной параметр в
данном случае — это сосчитанное количество нажатий. Все параметры вместе составляют
интерфейс модуля, то есть описание того, как с ним взаимодействовать (interface по-английски
буквально означает «между лицами», я вижу это как взаимодействие двух лиц: речь, мимика).
Посмотрите на описание упражнения №2 на псевдоязыке ABAP:
PERFORM upr_1 USING 'F6' CHANGING kolichestvo_F6.
PERFORM upr_1 USING 'F7' CHANGING kolichestvo_F7.
PERFORM upr_1 USING 'F8' CHANGING kolichestvo_F8.
Здесь PERFORM, USING, CHANGING — это ключевые слова языка ABAP;
UPR_1 — название программного модуля, где описана логика выполнения упражнения №1;
'F6', 'F7', 'F8' — фактические значения входного параметра этого программного модуля;
KOLICHESTVO_F* — имена переменных, куда идут факт. значения выходного параметра.

Для базового понимания ABAP-программ осталось раскрыть термин инклюд. Это странное
слово — звуковая копия английского термина include, который можно перевести как «часть,
включаемая в целое».
Как можно передать другому человеку описание упражнений №1 и №2, т.е. алгоритм их
выполнения? Можно написать по-русски на одном листке бумаги. Можно написать каждое
упражнение на отдельном листке и передать ему два листка. Во втором случае упражнение
№2 будет непонятно без первого листка, так как все шаги этого упражнения отсылаются к
упражнению №1. Но зато изложение второго упражнения будет очень лаконичным. Еще одна
особенность двухлистковой записи в том, что если дописать в упражнение №1 какой-либо шаг,
то выполнение упражнения №2 исполнителю будет нужно делать по-новому, хотя на втором
листке никаких изменений не произведено.
Запись на двух листках — это запись программы с использованием инклюда.
Первый листок, с описанием упражнения №1 в виде модуля.
Uprazhnenie_1. "Заголовок программы
DATA kolichestvo_F5 TYPE i. "объявление переменной для хранения кол-ва нажатий
F5

FORM upr_1 USING klavisha CHANGING kolichestvo. "Описание упражнения №1


ZAPUSTI ZTG_DEBUG_01 V OTLADCHIKE. "шаг 1
RAZMESTI OKNO OTLADCHIKA SPRAVA. "шаг 2
OBRATI VNIMANIE NA AKTIVNOST OKON. "шаг 3
DO POKA LEVOE OKNO NE STANET AKTIV. "шаг 4 — начало цикла
NAZHIMAI klavisha. "нажимай указанную клавишу
ADD 1 TO kolichestvo. "считай нажатия
ENDDO. "шаг 4 – конец цикла
NAZHMI KNOPKU NAZAD. "шаг 5
VIIDI IZ AKTIVNOGO OTLADCHIKA. "шаг 6
стр. 14
ENDFORM. "конец описания упр. №1

PERFORM upr1 USING 'F5' CHANGING kolichestvo_F5. "выполнение упр. №1


Второй листок, с описанием упражнения №2. Оно записано с использованием инклюда.
Uprazhnenie_2. "Заголовок программы, в которую включено...
INCLUDE Uprazhnenie_1. "описание другой программы как инклюд

DATA kolichestvo_F6 TYPE i. "объявление переменной для хранения кол-ва нажатий


F6
DATA kolichestvo_F7 TYPE i. "объявление переменной для хранения кол-ва нажатий
F7
DATA kolichestvo_F8 TYPE i. "объявление переменной для хранения кол-ва нажатий
F8

PERFORM upr_1 USING 'F6' CHANGING kolichestvo_F6. "выполнение упр. №1 для F6


PERFORM upr_1 USING 'F7' CHANGING kolichestvo_F7. "выполнение упр. №1 для F7
PERFORM upr_1 USING 'F8' CHANGING kolichestvo_F8. "выполнение упр. №1 для F8
В данном случае на втором листке размещена программа упражнения №2, в которую как
инклюд включена программа упражнения №1. Программа №1 без второго листка роботу-испол-
нителю будет понятна, а вот программа №2 без первого листка — нет, так как нигде не будет
написано, что такое Uprazhnenie_1 и upr_1. Главная программа должна иметь доступ ко всем
включенным в нее инклюдам.
В ABAP есть специальный тип программ — инклюды (include-программы) — которые
самостоятельно никогда не выполняются, в отличие от выполняемых программ, а
предназначены для включения в последние.
Обе программы с вышеприведенных листков могут исполняться (ну, принимая во внимание,
что записаны они на псевдоязыке) и рассчитают, соответственно, одно и три числа.
Информация о прерванной программе в общей части экрана отладчика
Разберем, какая информация о прерванной программе выводится ниже исхоженных в
предыдущем разделе кнопок F5–F8 в окне отладчика. Что именно выводится, можно понять по
всплывающим подсказкам к иконкам (в данном случае отладчик в режиме 1):

Рис. 18. Подсказки к иконкам общей части экрана отладчика, в двух режимах
Режим отладчика устанавливается автоматически в зависимости от места прерывания:
режим 1 — это обычная отладка, ABAP;
режим 2 — это отладка логики выполнения экранов, Screen.
В режиме 1:
— Справа от иконки «Программ/Include/Стр» выводится:
а) название главной программы — в данном случае ZTG_DEBUG_01;
б) название текущего инклюда — ZTG_DEBUG_01_F01;
в) номер строки в инклюде — 29.
— Справа от иконки «СобытиеПрограммы» выводится:
г) тип программного модуля — в данном случае FORM, подпрограмма;
д) название этого модуля — CONVERT_I_INTO_STRING.

В режиме 2:

стр. 15
— Справа от иконки «Программ» выводится название программы, к которой принадлежит
экран, чья логика выполнения была прервана отладчиком.
— Справа от иконки «СобытЭкрана» выводится тип прерванного события: либо PAI (Process
After Input), либо PBO (Process Before Output).
— Справа от иконки «НомерЭкрана/СтрокаЭкрана» выводится:
а) номер экрана, чья логика выполнения была прервана отладчиком;
б) номер строки в этой логике, на которой произошло прерывание.

Для обоих режимов в самом правом столбце выводится значение двух системных
переменных. По умолчанию это SY-SUBRC и SY-TABIX, но вместо них можно вписать другие,
например, SY-LANGU.

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

стр. 16
Больше про общую часть экрана отладчика сказать нечего, переходим ниже, ко вкладкам.
Вкладка «Стандарт», список инструментов и план по их рассмотрению
На любой вкладке можно изменить набор инструментов. Перейдем на вкладку «Стандарт».
Нажмем кнопку «Новый инструмент» на любой из трех панелей в правом верхнем углу
инструментов. Откроется список всех инструментов для выбора одного к добавлению на экран.

Рис. 19. Список всех инструментов отладчика в системе версии ECC 6.0
В главе «Базовый просмотр состояния программных объектов» рассмотрю инструменты:
- «Исходный текст» (“Source Code”),
- «Вызов/пакет»,
- «Быстрый просмотр переменной»
- “DiffTool”
Первые три из перечисленных инструментов отображаются на вкладке «Стандарт».
В главе «Управление выполнением программы» рассмотрю:
- инструмент «Точки прерывания» (“Breakpoints”),
- команду Goto Statement инструмента «Исходный текст» (“Source Code”),
- изменение значений объектов в инструментах папки «Объекты данных» (“Data Objects”).
В главе «Продвинутый просмотр» покажу работу с инструментами
- «Анализ памяти» (“Memory Analysis”),
- «Системные области (внутр.)» (“System Areas (Internal)”),
- «Загруж. программы» (глоб. данные)» (“Loaded Programs (Global Data)”).
Упражнение №3 «Базовая информация о месте прерывания»
Ответы на три вопроса этого упражнения оформите в виде программы ZABAP_L5_Z3_id,
которая будет выводить три строки: 1) число, 2) число и через пробелы название инклюда и
название программы, 3) строчку.
Шаг 1. Запустите программу ZTG_DEBUG_01 на выполнение (см. сценарий Запуск
программы с известным названием на выполнение в приложении Б):
- в поле команды укажите /NSE38,
- введите название программы ZTG_DEBUG_01,
- нажмите клавишу F8.
Выполнение программы прервется, откроется отладчик.
Вопрос 1. На какой рисунок из этой главы похоже то, что вы видите после шага 1 (укажите
номер и название рисунка)?
Вопрос 2. На какой строке какого инклюда какой программы произошло прерывание?
Ответ оформите в виде программы ZABAP_L5_Z3_id, которая будет выводить номер и два
названия, все одной строкой, вот в таком виде:
Прерывание произошло на строке 999 инклюда INCLUDE_NAME программы
PROGRAM_NAME.

стр. 17
В заголовок программы пропишите название упражнения и вашу фамилию в скобках.
Используйте программу-шаблон (название без _id).

Шаг 2. Выйдите из отладчика нажатием клавиши F8 или через пункт меню


«ОтладчикДальше F8», продолжив прерванное выполнение программы.
Вопрос 3. Что было выведено на экран после шага 2? Напишите одну последнюю строчку.
Упражнение №4 «Отладка обычная, отладка логики экрана»
Ответы на вопросы этого упражнения оформите в виде программы ZABAP_L5_Z4_id,
которая будет выводить четыре строки: 1) ответ «да» или «нет», без перечисления подсказок,
2) слово «обычный» или «экранный», 3) название вкладки на английском, 4) число (номер
строки) и через пробелы номер экрана и название программы.
В заголовок программы пропишите название упражнения и вашу фамилию в скобках.
Используйте программу-шаблон (название без _id).

Шаг 1. Запустите транзакцию SE11 и введите название таблицы SFLIGHT.


Шаг 2. Введите команду /h в поле для ввода команд слева вверху.
Шаг 3. Нажмите кнопку «Просмотр». Откроется отладчик.
Вопрос 1. Отличается ли набор иконок в общей части отладчика в этом случае от того, что
был в упражнении №1? Если да, то укажите, какие всплывающие подсказки добавились,
изменились или пропали.
Вопрос 2. В каком режиме находится отладчик, в обычном или в отладке логики экрана?

Шаг 4. Перейдите к исходному коду нажатием на иконку с картиной слева от 0102 в общей
части экрана. отладчика.
Вопрос 3. Какая вкладка активна в открывшемся окне?
Вопрос 4. На какой строке в логике выполнения какого экрана какой программы произошло
прерывание?

Шаг 5. Закройте окно и выйдите из отладчика нажатием клавиши F8.

Упражнение №5 «Системные переменные»


Ответы на вопросы этого упражнения оформите в виде программы ZABAP_L5_Z5_id,
которая будет выводить три строки:
1) Название первой переменной и название второй переменной и через пробел ее
значение. Например «SY-TCODE SY-LANGU».
2) Значение первой переменной и через пробел – второй. Например, «SE38 RU».
3) Значение первой переменной и через пробел – второй.
В заголовок программы пропишите название упражнения и вашу фамилию в скобках.
Используйте программу-шаблон (название без _id).

Шаг 1. Запустите программу ZTG_DEBUG_01. Откроется отладчик.


Вопрос 1. Какие две системные переменные отображаются в отладчике перед шагом 2?
Вопрос 2. Каковы были их значения?

Шаг 2. В общей части экрана отладчика замените введенные системные переменные на


SY-REPID и SY-LANGU.
Вопрос 3. Каковы значения введенных вами переменных?

Шаг 3. Выйдите из отладчика нажатием клавиши F8.

стр. 18
Базовый просмотр состояния программных объектов
Итак, мы помним — отладчик нужен для того, чтобы прервать выполнение программы и
посмотреть на состояние обрабатываемых ею программных объектов, сверив его с
ожидаемым. В этой главе раскрываются базовые возможности такого просмотра.
Будут рассмотрены три инструмента, расположенные на вкладке «Стандарт»:

Рис. 20. Три инструмента вкладки «Стандарт»

Инструмент «Исходный текст» (“Source Code”)


Этот инструмент предназначен для просмотра исходного текста прерванной программы.
Текст называется исходным потому, что он служит базой для автоматического построения
программы в виде двоичного кода, исполняемого системой. Исходный текст пишется на языке
программирования ABAP, который повсеместно используется в системах SAP ERP.
Инструмент «Исходный текст» входит в стандартный набор инструментов и по умолчанию
присутствует на первых четырех вкладках экрана ABAP-отладчика, это один из трех
инструментов, присутствующих по умолчанию на вкладке «Стандарт». Смотри его описание по
ссылке New ABAP DebuggerToolsEditor.
Посмотрим внимательнее на этот инструмент (см. рисунок Полный экран отладчика, три
инструмента вкладки «Стандарт»):

Рис. 21. Инструмент «Исходный текст» крупно


Идем слева направо. Видим желтую стрелку напротив строки 29, где расположена
инструкция из ключевого слова BREAK-POINT. Стрелка указывает на текущую инструкцию для
стр. 19
выполнения (“currently processed statement”, см. Editor), т.е. на ту инструкцию, с которой будет
продолжено прерванное выполнение программы.
Видны пронумерованные строчки ABAP-программы, с первой по 30-ю. Видны символы [–],
щелчком по которым можно свернуть соответствующий блок текста (это не влияет на
выполнение программы). Свернуть/развернуть блоки можно через контекстное меню «Блоки»
или комбинациями
Жирным шрифтом обозначены границы программного модуля FORM..ENDFORM, в котором
расположен курсор. Синим цветом выделены ключевые слова языка ABAP: FORM, ENDFORM,
USING, TYPE, CHANGING, SELECT, FROM, INTO, WHERE, BREAK-POINT. Вместе с
неключевыми словами они формируют инструкции языка ABAP, заканчивающиеся точками —
инструкции можно рассматривать как предложения естественного языка, см. выше Пояснение
о программных инструкциях, модулях и инклюдах. Серым цветом даны комментарии для
читающего исходный текст, они не участвуют в формировании порядка действий компьютера.
В данном фрагменте неключевые слова трех видов:
1. Названия программных модулей: подпрограммы count_rows_in_sflight, convert_i_into_string.
2. Названия программных объектов:
2.1. USING-параметры iv_carrid, iv_number (можно считать входными параметрами).
2.2. CHANGING-параметры rv_line_count, rv_string (можно считать выходными).
2.3. Название таблицы базы данных: sflight.
2.4. Название поля в таблице sflight: carrid.
3. Названия типов программных объектов: i (целое число), string (символьная строка).
Программа собирается из программных модулей, на которые разделена ее логика. Внутри
модулей обрабатываются программные объекты. Каждый объект имеет определенный тип. Тип
задает операции, которые можно выполнять с объектом, и его допустимые значения
(например, символьные строки нельзя арифметически складывать между собой, а числа —
можно, целочисленный тип не допускает хранения дробных чисел типа 0,5).
В отладчике двойной щелчок на некоторые слова вызывает определенное действие:
1. Для границы программного модуля — переход на другую его границу.
2. Для программного объекта — просмотр его значения в инструменте «Быстрый просмотр
переменной», соседнем с инструментом «Исходный текст».
При наведении курсора на программный объект во всплывающей подсказке отображается
его значение, тип и размер в символах, если данных объект виден из того места, где прервана
программа. Видимость объекта в общем определяется так: он виден внутри того программного
модуля, где был объявлен, а объявление обычно содержит либо LIKE, либо TYPE (например,
iv_number TYPE i).
Упражнение №6 «Значения переменных во всплывающих подсказках»
Ответы на вопросы этого упражнения оформите в виде программы ZABAP_L5_Z6_id,
которая будет выводить строки:
1) Строки из заполненной таблички, например «шаг 2 2 десять»
2) Число
3) Слово «да» или «нет»
В заголовок программы пропишите название упражнения и вашу фамилию в скобках.
Используйте программу-шаблон (название без _id).

Шаг 1. Запустите программу ZTG_DEBUG_01. Откроется отладчик.


Шаг 2. Наведите курсор мыши на iv_number, а затем на rv_string в интерфейсе модуля
convert_i_into_string. Запишите данные из всплывающих подсказок в табличку.
Шаг Значение и тип
iv_number rv_string
шаг 2
шаг 4
Шаг 3. Нажмите два раза клавишу F5 (или кнопку «Отдельный шаг (F5)»).
Шаг 4. Впишите информацию из всплывающих подсказок в табличку, в строку «Шаг 4».
Шаг 5. Наведите курсор мыши на iv_carrid на строчке 13.

Вопрос 1. Какие значения получились в табличке?


Вопрос 2. На какой строке очутилась желтая стрелка на шаге №4? Как она
видоизменилась?
стр. 20
Вопрос 3. Появляется ли всплывающая подсказка для параметра iv_carrid на шаге 5?
Почему?
Инструмент «Быстрый просмотр переменной» (“Variable Fast Display”)
Это один из трех инструментов, присутствующих по умолчанию на вкладке «Стандарт»,
смотри его описание по ссылке New ABAP DebuggerToolsOverview of Variables (Variable
Fast Display). Он показывает в табличном виде текущее состояние программных объектов,
список которых задает пользователь. Число объектов в списке не ограничено. Показываемая
информация дополняет то, что показывается во всплывающих подсказках к программным
объектам в инструменте «Исходный текст»: добавлен столбец «16-ричное значение»,
«АбсолютныйТип».
Столбец «16-ричное значение» полезен для того, чтобы явным образом видеть пробелы.
Пробел в 16-ричном представлении выглядит как 2000, ноль — 3000, единица — 3100.
Столбец «АбсолютныйТип» полезен тем, что по двойному щелчку по полю в нем можно
провалиться в словарь данных, в соответствующий элемент данных. Это не всегда. "TODO
Еще одно отличие от подсказок: в списке могут присутствовать те объекты, которые из
месторасположения текущей инструкции исполнителю не видны, их значение будет не
определено. В этом случае в соответствующей строчке, в ячейке столбца «Статус
переменной», будет размещена иконка «Недействит. переменная».
Еще одна фича — можно сохранять параметры для тестирования ФМ (SE37) "TODO
Вообще, можно показать все команды через кнопку «Сервис» инструмента

стр. 21
Упражнение №7. «Быстрый просмотр переменных»
Ответы на вопросы этого упражнения оформите в виде программы ZABAP_L5_Z6_id, которая будет выводить строки с ответами:
1) Число
2) Число
3) Пара слов «да» или «нет»
4) Шесть строк из заполненной таблички.
В заголовок программы пропишите название упражнения и вашу фамилию в скобках. Используйте программу-шаблон (название без _id).

Шаг 1. Запустите программу ZTG_DEBUG_01. Откроется отладчик.


Шаг 2. В инструменте «Быстрый просмотр переменных» перейдите на вкладку Globals.
Вопрос 1. Сколько глобальных переменных видно?

Шаг 3. Перейдите на вкладку Locals.


Вопрос 2. Сколько локальных переменных видно?

Шаг 4. Нажмите клавишу F7, чтобы выйти из текущего программного модуля.


Вопрос 3. Остались ли видны локальные переменные? А глобальные?

Шаг 5. Добавьте к просмотру следующие объекты: space (двойной щелчок в строке 30), text-t01 и text-t02 (суффиксы txx взять из строк 25 и
27), sy-abcde, sy-abcde+4(3), sy-abcde+40(3).
Вопрос 4. Каковы значения добавленных переменных? Ответьте шестью строчками в табличке ниже.
Переменная Значение Изменя 16-ричное значение Технический Абсолютный тип Флаг «Только
емо? тип чтение»?
Упражнение №8 «Изменение значений у переменных»
Ответы на вопросы этого упражнения оформите в виде программы ZABAP_L5_Z8_id:
1) Строчки заполненной таблички.
2) Две строчки, в каждой название объекта, название инклюда и название программного модуля.
3) Строчки, по одной для каждого объекта: название объекта, название инклюда.
4) Число и слово «да» или «нет».
В заголовок программы пропишите название упражнения и вашу фамилию в скобках. Используйте программу-шаблон (название без _id).

Шаг 1. Запустите программу ZTG_DEBUG_01. Откроется отладчик.


Шаг 2. Добавьте в «Быстрый просмотр переменной» объекты по списку в столбце «Переменная» из нижеследующей таблички:
Переменная Значение 16-ричное Технический Значение 16-ричное Технический Значение 16-ричное Технический
значение тип значение тип значение тип
Шаг 3 Шаг 4 Шаг 5
P_CARRID
IV_CARRID
RV_LINE_COUNT
IV_NUMBER
RV_STRING
GV_LINE_COUNT
GV_LINE_COUNT_STR
GV_RESULT

Шаг 3. Выполните два шага, дважды нажав клавишу F5 и очутившись на строке 30 инклюда ZTG_DEBUG_01_F01. Заполните столбцы по
шагу 3 в табличке.
Шаг 4. Поменяйте значение программных объектов IV_NUMBER, RV_STRING: двойной щелчок на кнопку с карандашом, отнимите единицу.
Заполните столбцы по шагу 4.
Шаг 5. Выйдите из модуля, один раз нажав клавишу F5, F6 или F7, и оказавшись на строке 20 инклюда ZTG_DEBUG_01. Заполните
столбцы по шагу 5.
Шаг 6. Поставьте точку прерывания на строке 31 инклюда ZTG_DEBUG_01, нажав левой кнопкой мыши на желтую область слева от
номера это строки. В статусной строке должно появиться сообщение «Точка прерывания установлена».
Шаг 7. Выполните все инструкции до установленной точки прерывания, нажав клавишу F8. Посмотрите на значение gv_result.
Шаг 8. Выйдите из отладчика, нажав клавишу F8.

Вопрос 1. Какая в итоге получилась табличка?


Вопрос 2. Какие два объекта недоступны для просмотра на шаге 2? В каком инклюде и каком программном модуле они объявлены?
Вопрос 3. Сколько объектов недоступно для просмотра на шаге 5? Перечислите названия. В каком инклюде они объявлены?
Вопрос 4. Какова длина поля gv_result на шаге 7? Число видно сразу, высчитывать ничего не нужно. Изменялось ли это число?
стр. 24
Инструмент «Вызов/пакет» (стек вызовов, “Call Stack”)
Это один из трех инструментов, присутствующих по умолчанию на вкладке «Стандарт»,
смотри его описание по ссылке New ABAP DebuggerToolsStack. Он показывает в
табличном виде порядок вызова программных модулей и позволяет переключаться между
ними. Каждой строке соответствует один вызов программного модуля.
Русский перевод названия на мой взгляд неудачен, лучше переводить “Call Stack” как «Стек
вызовов». Под пакетом в этом инструменте подразумевается стек, но стек это не просто
сваленные в один пакет элементы. Стек — это набор пронумерованных элементов,
сформированный, в данном случае, по принципу «Первым вошел, последним вышел» (FILO,
“First In – Last Out”). Это значит, что модуль, вызванный первым, для своего завершения
должен дождаться завершения выполнения всех вызванных из него модулей.

Рис. 22. Инструмент «Вызов/пакет» (стек вызовов)


В столбце «УказПакета» (указатель пакета, “Stack Pointer”) стрелкой отмечается активный в
данный момент модуль прерванной программы. В отладчике системы версии ECC 6.0 вместо
стрелки может быть надпись «@CG\QАктуальная позиция пакета» — это баг в стандартной
программе, исправленный к версии 7.5.

Рис. 23. Исправленный баг со стрелкой в стеке вызовов в системе 7.5


В столбце «Навигация» отображаются значки, щелчок по которым открывает в новом окне
исходный текст соответствующего модуля — на просмотр в ABAP-редакторе.
В столбце «ГлубинСтек» числами отмечается глубина стека по каждой строке. Число 1
соответствует первому вызванному модулю, т.е. началу выполнения программы. При вызове
любого модуля в ходе выполнения программы (клавиша F5) глубина стека увеличивается на 1.
При завершении модуля (клавиши F5, F6, F7) — уменьшается на 1.
В стек складываются модули двух типов: экранные и обычные. Отличить их в первую
очередь можно по значку в столбце «StckType» (тип записи стека): если картинка, то это экран-
ный модуль, если синие строчки в квадрате — это обычный программный модуль. Смотри
также описание двух соответствующих режимов отладчика — Рис. 18. Подсказки к иконкам
общей части экрана отладчика, в двух режимах.
Можно переключить инструмент на отображение либо только программных модулей, либо
только экранных, либо модулей обоих типов. Рекомендую выбирать последний режим.
Настройка расположена в двух местах: глобальная для всех инструментов "Call Stack"
находится в верхнем меню, локальная для каждого отдельного инструмента находится в его
меню настроек. Локальная имеет больший приоритет, чем глобальная.
Рис. 24. Глобальная настройка Stack Type в инструменте «Вызов/пакет» (“Call Stack”)

Рис. 25. Локальная настройка Stack Type в инструменте «Вызов/пакет» (“Call Stack”)
В оставшихся столбцах выводится информация о месторасположении вызовов модулей в
исходном коде программ. Информация по вызову активного модуля дублируется в общей
части экрана отладчика, см. Информация о прерванной программе в общей части экрана
отладчика.
По двойному щелчку на любом столбце, кроме «Навигация», происходит смена активного
модуля:
- в инструменте «Исходный текст» отображается соответствующее место вызова,
- в инструменте «Быстрый просмотр переменной» обновляется видимость переменных,
- в общей части экрана отладчика обновляется информация о месте вызова,
стр. 26
- указатель в столбце «УказПакета» перемещается на новое место.
Есть ограничение: переключаться на экранные модули в стеке вызовов нельзя, при попытке
сделать это выдается следующее сообщение (и сколько же лет там висит это “yet”?):

Рис. 26. Ошибка при попытке навигации к экранному модулю в стеке вызовов
Cтек вызовов можно выгрузить в локальный файл.
Упражнение №9 «Стек вызовов»
Ответы на вопросы этого упражнения оформите в виде программы ZABAP_L5_Z9_id,
которая выдает строчки:
1) Число.
2) «да» или «нет».
3) Число и «да» или «нет».
4) Число и название события, название программы.
5) «да»/«нет» три раза.
В заголовок программы пропишите название упражнения и вашу фамилию в скобках.
Используйте программу-шаблон (название без _id).

Шаг 1. Запустите программу ZTG_DEBUG_01. Откроется отладчик. Переключите


настройку Stack Type в инструменте «Вызов/Пакет» на «ABAP и Screen».
Вопрос 1. На какой глубине стека находится активный программный модуль?

Шаг 2. Добавьте в быстрый просмотр переменных IV_NUMBER, RV_STRING.


Шаг 3. Перейдите на предыдущий уровень двойным щелчком по любому столбцу, кроме
«Навигация».
Вопрос 2. Доступны ли на этом предыдущем уровне добавленные объекты?

Шаг 4. Выполните шаг клавишей F5 или F6, оставаясь на этом предпоследнем уровне
стека.
Вопрос 3. Какой уровень стека стал активным? Удалось ли остаться на предпоследнем?

Шаг 5. Выполните выход на предыдущий уровень клавишей F7.


Вопрос 4. Какой уровень активен? Какое событие какой программы?

Шаг 6. Установите курсор на последнюю строчку главной программы, на ключевое слово


WRITE. Выберите пункт верхнего меню ОтладчикДалее – до курсора (Shift+F8).
Вопрос 5. Поменялся ли уровень? Событие? Программа?

Шаг 7. Выйдите из отладчика, нажав клавишу F8.


Инструмент “DiffTool”, сравнение переменных и строк таблицы
Сравнение двух переменных
Сравнение двух строк таблицы

стр. 27
Управление выполнением программы
Как было написано выше, отладчик нужен для того, чтобы прервать выполнение программы
и посмотреть на состояние обрабатываемых ею программных объектов, сверяя его с
ожидаемым. В этой главе раскрываются базовые возможности по прерыванию выполнения
программы и, шире, по управлению ее выполнением.
В этой главе рассмотрим:
- инструмент «Точки прерывания» (“Breakpoints”),
- команду Goto Statement инструмента «Исходный текст» (“Source Code”),
- изменение значений объектов в инструментах папки «Объекты данных» (“Data Objects”).
Инструмент «Точки прерывания» (“Breakpoints”)
Точки прерывания: три вида (отладчика, сеанса, внешняя)
Чтобы обойти дампующую инструкцию, например.
Точка прерывания на ключевое слово инструкции (MESSAGE, etc)
Пропуски к точкам прерывания
Точки наблюдения
Переход к оператору (Goto Statement инструмента «Исходный текст»)
Изменение значения переменной/параметра

стр. 28
Запуск отладчика
Выше было рассмотрено, как запустить отладчик прерыванием выполнения обычной
программы. В этой главе собраны все способы попадания в отладчик, т.е. прерывания
выполнения и обычных программ, и других.
Обычный запуск: точка останова или команда /h
Уже рассмотрено в предыдущей главе.
Попадание в отладчик из динамической ошибки (из «дампа»)
Смотри сценарий Переход в отладчик из сообщения о динамической ошибке (о «дампе»).
Запуск отладчика для всплывающего окна (/h через ярлык в SAP Logon)
Смотри сценарий Прерывание программы со всплывающего окна через ярлык /h.
Запуск отладки неактивных фоновых заданий: SM37 + команда JDBG
Смотри сценарий Переход в отладчик из SM37.
Смотри также https://blogs.sap.com/2016/01/26/debug-background-job-with-ease/.
Запуск отладки активных фоновых заданий: SM50
Смотри сценарий .
Смотри также https://blogs.sap.com/2016/01/26/debug-background-job-with-ease/.
Запуск отладки активных диалоговых процессов: SM50
Запуск отладки RFC: SM50
Через SM50. Нужно настроить полномочия на удаленную отладку, через транзакцию
srdebug.
Смотри https://answers.sap.com/questions/12012865/sm50---debugging-currently-not-
possible.html

стр. 29
Продвинутый просмотр: расход памяти, memories…
В этой главе рассмотрим инструменты:
- «Анализ памяти» (“Memory Analysis”),
- «Системные области (внутр.)» (“System Areas (Internal)”),
- «Загруж. программы» (глоб. данные)» (“Loaded Programs (Global Data)”).
Инструмент «Анализ памяти» (“Memory Analysis”)

Инструмент «Системные области (внутр.)» (“System Areas (Internal)”)

Просмотр расходуемой памяти


Просмотр memories
Просмотр инструмента работы с SAP и ABAP памятью
Просмотр последовательности байтов в виде xml и преобразования в
текстовый вид средствами отладчика
Инструмент «Загруж. программы» (глоб. данные)» (“Loaded Programs
(Global Data)”)
Assign глобальных данных из другой программы

стр. 30
Новые возможности отладчика в 7.5
По сравнению с отладчиком в системе версии ECC 6.0, возможности которого описаны
выше, отладчик в системе версии NetWeaver 7.5 (примерно с 2012 г.) получил новые
возможности. Посмотреть на него можно в системе BDR.

Рис. 27. Информация о системе BDR версии NetWeaver 7.5 (СистемаСтатус)


Новинок много, и для облегчения знакомства с ними была даже сделана подборка советов,
смотри меню Miscellaneous  Debugger tips. Там можно встретить, например, такой совет:

Рис. 28. Один из советов по использованию новинок отладчика в 7.5

стр. 31
Новые настройки

Рис. 29. Отладчик в 7.5: параметры настройки

Новая кнопка Step Size


Два варианта: subcondition/statement или (по-умолчанию) lines/statements.
Новые кнопки Last Exception Object и Display Trigger Location
Помогают в анализе произошедших исключительных ситуаций (Exceptions).
Новая кнопка Configure Debugger Layer
Ей соответствует новая настройка Layer-Aware Debugger Active.
Новая вкладка Script (инструмент Debugger Scripting)
Отдельная большая тема. Показать что-то простенькое, из примеров от SAP.

стр. 32
Новые инструменты

Рис. 30. Сравнение списка инструментов отладчика в 6.0 и в 7.5


Кроме Debugger Scripting в раздел Special Tools добавлены и другие новые инструменты:
 Trace (SE30/ST05)
 Display Execution
 Console: XML and List Preview
 Script Wrapper
Также добавлен новый раздел Memory Management, куда переехал инструмент Memory
Analysis и где размещены еще два новых инструмента:
 Application-Specific Memory Views
 Memory Object Explorer
Новое в уже существовавших инструментах
В инструмент «Точки прерывания» добавлен столбец Conditions. Теперь можно
остановиться внутри цикла на определенной его итерации, поставив, например, условие sy-
index = 25. В этот же инструмент добавлен новый столбец Filter.
В инструмент «Быстрый просмотр переменной» добавлены вкладки Memory Analysis. Там же
добавлена новая вкладка Auto.
В инструмент «Таблицы» добавлена возможность посмотреть ключ и индексы таблицы, а
также возможность настроить порядок отображения ее столбцов.

Рис. 31. Просмотр таблиц в новом отладчике снабжен кнопками Key/Indexes и Columns
В инструмент «Отдельное поле» добавлены новые способы просмотра, полный список
способов теперь содержит 6 позиций:
1) VAR_HTML
2) VAR_SHORT
3) VAR_TABULAR_ASCII_HEX
стр. 33
4) VAR_TEXT
5) VAR_TRANSLATED
6) VAR_XML

стр. 34
Приложение А «Исходные тексты программ в формате
NUGG»

Исходные тексты программ размещены в текстовом файле — . Его можно


открыть на чтение в обычном блокноте или в Notepad++. Содержимое его выгружено из
системы программой ZSAPLINK, в формате XML. Этой же программой можно загрузить
содержимое файла в другую систему, создав учебные программы и там.

Шаблоны программ ZABAP_L5_Z* размещены в файле .

стр. 35
Приложение Б «Сценарии взаимодействия с SAP ERP»
Вход в систему SAP ERP
См. главу Вход в систему. Клиент и сервер, сеанс, окно, экран.
1) Запустите Windows-приложение SAP Logon.
2) Выделите одну из доступных систем и нажмите Enter.
3) Введите имя пользователя и пароль, а также язык = RU и нажмите Enter.
Для дальнейших сценариев обязательным требованием является выполнение входа в
систему SAP ERP, если явно не оговаривается обратное.
Запуск транзакции
См. главу Вход в систему. Клиент и сервер, сеанс, окно, экран и Рис. 5. Окно SAP GUI, его
экран и другие компоненты.
1) Введите код транзакции в поле для ввода команд, предварив его /N.
2) Нажмите Enter.
Пример: для запуска транзакции SE11 введите /NSE11 (или /nse11).
Просмотр документации
1) Запустите транзакцию ABAPHELP для просмотра всей документации, включая справку
по ключевым словам.
2) Запустите транзакцию ABAPDOCU для просмотра программ-примеров.
Выгрузка копии документации из системы SAP ERP в виде веб-страниц
1) Запустите транзакцию ABAPHELP.
2) Не вводя ничего в поле «ABAP-понятие» нажмите клавишу Enter.

3) В открывшемся всплывающем окне «Документация к ключевым словам ABAP» нажмите


кнопку «Создать оффлайн-версию».

4) В еще одном открывшемся всплывающем окне «Создание оффлайн-версии


документации по ключевым словам ABAP» укажите путь для сохранения (например, «C:\
ABAP_DOCU_HTML\») и нажмите клавишу F8.
5) При возникновении предупреждения о том, что каталог будет создан, ответьте на него
утвердительно.
6) При возникновении предупреждения «Безопасность SAP GUI» нажмите кнопку
«Допустить».

стр. 36
7) После завершения выгрузки будет выдано сообщение вида «Выгрузка оффлайн-версии
завершена. Откройте BASIC.HTM в C:\ABAP_DOCU_HTML\».

Просмотр исходного текста программы с известным названием в


ABAP-редакторе
1) Запустите транзакцию SE38.
2) Введите известное вам название программы в поле «Программа».
3) Нажмите кнопку «Просмотр».
Пример: для просмотра первой демо-программы используйте название ZTG_DEBUG_01.
Запуск программы с известным названием на выполнение
1) Запустите транзакцию SE38.
2) Введите известное вам название программы в поле «Программа».
3) Нажмите клавишу F8 или кнопку , или выберите пункт меню
«ПрограммаВыполнитьПрямой (F8)».
Запуск программы с известным названием в отладчике
1) Запустите транзакцию SE38.
2) Введите известное вам название программы в поле «Программа».
3) Нажмите комбинацию клавиш Shift+F5 или кнопку , или выберите пункт меню
«ПрограммаВыполнитьОтладка (Shift+F5)».
Просмотр исходного текста программы из отладчика
Требуется: активное окно с отладчиком.
1) Выберите пункт меню «Перейти кНавигация к исходному коду». Здесь используется
слово «код», хотя это не зашифрованный код, а в принципе понятный текст. До этого
момента везде использовался термин «исходный текст». Считайте эти слова равными, а
возникновение «кода» — несогласованностью перевода разных частей на русский.
2) Если лимит в 6 окон SAP Logon еще не достигнут, то откроется новое окно, в котором
будет запущен ABAP-редактор в режиме просмотра, в нем будет показан тот же
исходный текст, что отображается в отладчике.
Прерывание программы на отладчик на любом ее экране командой /h
См. Вход в отладчик и его настройка.
Требуется: окно SAP Logon, в котором запущена транзакция или программа.
1) Введите команду /h в поле для ввода команд.
Месторасположение этого поля см. на Рис. 5. Окно SAP GUI, его экран и другие компоненты.
2) Нажмите Enter и получите сообщение «Отладка включена» в строке статуса.
3) Выполните любое действие в текущем окне (кроме прокрутки ALV-грида).
4) Обработка действия будет прервана, откроется окно отладчика.
Создание ярлыка в SAP Logon для команд /h
Для этого сценария вход в систему SAP ERP не требуется.
1) Запустите SAP Logon.
2) Щелкните правой кнопкой мыши на папке «Ярлыки» и выберите пункт «Добавить новую
запись (Ctrl+N)» в открывшемся контекстном меню.
3) В открывшемся всплывающем окне «Создать новый ярлык SAP» введите следующее:
Заголовок — /h
Тип — Системная команда
стр. 37
Команда — /h
Описание системы — выберите систему
Мандант, Пользов., Язык — введите данные как при входе в выбранную систему
4) Получите сообщение
Прерывание программы со всплывающего окна через ярлык /h
Требуется: а) выполнить предыдущий сценарий, б) видеть окно SAP Logon, в котором
запущена транзакция или программа, и вызванное из него всплывающее окно с кнопками.
1) Переключитесь на окно SAP Logon.
2) Запустите в нем ранее созданный ярлык /h.
3) Получите сообщение «Отладка включена» в статусной строке окна, из которого было
вызвано активное в данный момент всплывающее окно.
4) Нажмите кнопку на этом всплывающем окне.
5) Обработка этой кнопки будет прервана, откроется окно отладчика.
Переход в отладчик из сообщения о динамической ошибке (о «дампе»)
Требуется: выполнить такое действие в системе, которое приводит к динамической ошибке
(например, запустить программу ZTG_DEBUG_03).
1) в окне «Динамическая ошибка: описание особой ситуации» нажмите кнопку «Отладчик»,
либо выберите пункт меню «Динамическая ошибкаОтладчик (F7)». Если вход в
систему был на английском языке, то соответствующие тексты будут «Runtime Error –
Description of Exception», «Debugger», «Runtime ErrorsDebugger (F7)».
2) Откроется окно отладчика, в заголовке которого будет отметка «post mortem».
Переход в отладчик из SM37
Переход в отладчик из SM50

стр. 38

Вам также может понравиться