:::: МЕНЮ ::::

Динамические точки остановки в ABAP-отладчике

Все программисты и большинство консультантов используют ABAP отладчик. ABAP Debugger нужен для отладки приложений. Типичная задача для отладчика — найти место возникновения какого-нибудь события. Для поиска нужного места можно использовать пошаговое выполнение программы, а можно установить динамическую точку прерывания. Динамическими (или условными) точками прерывания будем называть такие точки, которые срабатывают при определенном событии.

Наиболее популярные события, с которыми мне приходилось сталкиваться:

  • Момент заполнения определенной переменной
  • Вывод сообщения через команду MESSAGE
  • Возникновение исключения
  • Выбора данных из определенной таблицы

Определение момента заполнения переменной

Допустим мы отлаживаем стандартный отчет MB51 и нам нужно найти место заполнения внутренней таблицы IMAKT_KEY[]. Чтобы найти место, в котором изменяется нужная переменная, нужно создать точку наблюдения. Для этого включаем отладку через «/h» и выбираем в меню «Точки прерывания» -> «Создать точку наблюдения»
Создание точки наблюдения

В появившемся окне, в поле «Перемен.» указываем имя наблюдаемой переменной
Точка наблюдения в ABAP Debugger

Далее выполняем программу, когда наблюдаемая переменная изменится, отладчик остановится
ABAP - остановка отладчика в точке наблюдения

Условие для точек наблюдения

Пусть мы знаем что в таблицу IMAKT_KEY[] попадет ОЗМ с кодом ‘000000000500000017’ и нам нужно найти момент когда произойдет это условие. Создаем точку наблюдения и в поле «Свобод. уров. условия» указываем нужное условие
Условие для точки наблюдения

Продолжаем выполнение программы. Отладчик остановится в нужный момент.
Просмотр точек наблюдения, а также их редактирование и удаление можно на вкладке «ТочкиПрерыв/Наблюд»
Просмотр точек наблюдения

Точка остановки при выводе сообщения

Предположим, у нас возникло сообщение и мы хотим найти место возникновения данного сообщения
Место возникновения сообщения

Для начала нужно определить класс и номер сообщения. Для этого, кликаем на него и смотрим на строку «№ сообщения MSITEM019». Классом сообщения будет MSITEM, а номером — 019.
Класс и номер сообщения

Далее открываем отладку и переходим на вкладку «ТочкиПрерыв/Наблюд». Нажимаем «Создать точку прерывания»
Создание точки прерывания

Переходим на вкладку «Сообщ.». Вводим класс сообщения в поле «Ид», а номер в поле «Номер». При необходимости можно указать тип (в нашем случае W).
Точка прерывания на сообщении

Продолжаем выполнение и останавливаемся в нужном месте
Точка прерывания на сообщении

Точка остановки при возникновении особой ситуации

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

Точка остановки при выборе данных из определённой таблицы

Когда нужно найти момент выбора данных из определённой таблицы, установка точки на всех операторах SELECT не целесообразна, т.к. их может быть огромное количество. Для остановки на выборе данных из нужной таблицы будем использовать скрипт.
Допустим нам нужно найти место выбора запасов из таблицы MSTQ в тр. MB52. Включаем отладчик и переходим на вкладку «Скрипт».
Скрипт в отладчике

Можно написать скрипт вручную, а можно использовать стандартный скрипт SAP. Нажимаем «Загр. скрипт» и вводим RSTPDA_SCRIPT_BP_SELECT_TAB. Далее нажимаем «Запуск скрипта» и вводим таблицу, на которую хотим поставить точку.
Точка остановки на таблице

Выполняем скрипт и останавливаемся в нужном месте
Точка остановки на нужной таблице


Присоединиться к обсуждению...