К основному контенту

Трассировка

https://abap-blog.ru/

1. Начиная с SAP_ABA 702 в отладчике появился инструмент позволяющий быстро включать трассировку (SE30/ST05):
Добавляем инструмент:



 Ставим точку перед вызовом SQL (В моем случае получение хранимого объекта):



2. ABAP отладчик ограничивает использование точек наблюдения (whatchpoints) на field-symbols, однако можно обойти это ограничение путём использования точки прерывания на базе исходного кода. 
Рассмотрим пример кода:
Предположим Вы захотели остановится на итерации цикла когда значение переменной <lv_test> будет иметь значение «3». Переходим в отладке на вкладку точек прерываний и устанавливаем её следующим образом (тут следует обратить внимание что не во всех версиях SAP системы есть ограничение относительно заданного условия), при этом в качестве строки кода обозначаем либо строку начала цикла, либо строку внутри цикла:







6 способов найти место вызова сообщений

Задачу определения места в программе, из которого было вызвано сообщение, можно решить несколькими способами. Ниже будут рассмотрены основные из них.
В качестве простого примера рассмотрим вызов сообщения в SE38, при неправильно указанном имени программы:
 Перейдя в указанный класс сообщений (тр. SE91) можно воспользоваться командой на поиск мест, где используется указанное сообщение:


В результате список окажется довольно большим и нам надо будет прощелкать все программы в поисках нужного вызова:
 В случае, когда список маленький, можем поставить точки прерывания в каждом из вызовов, повторим некорректный ввод программы мы, скорее всего, попадём в нужное нам место.
Данный способ не совсем удобен и не дает 100% результата, т.к. сообщение может быть вызвано не из класса сообщений, а список использования его программами может быть очень большим.
Способ второй. Наиболее результативными способами будут способы, которые используют отладчик. С помощью точек наблюдений в отладчике, мы можем отследить состояние системных переменных: sy-msgid и sy-msgno. Переходим в отладку (/h):

Способ третий. Таким же способом, как и ранее, попадаем в отладку, далее переходим к выставлению точек прерывания и указываем ABAP команду MESSAGE:
msg
Либо добавляем её через меню:
msg_menu
В данном случае можно будет указать еще и тип вызываемого сообщения:
msgmenu
Способ четвертый. Найти вхождение вызова оператора MESSAGE, используя программы сканирования исходного текста. Первое что нужно сделать определится через статус системы где мы находимся и в какой программе нужно искать (По меню Система -> Статус):
status
Далее открываем программу сканирования исходного текста (через SE38) RPR_ABAP_SOURCE_SCAN (либо использовать транзакцию CODE_SCANNER) и заполняем искомые данные:
scan
Результат:
scanres
Способ пятый. С помощью транзакции SAT можно проанализировать вызовы всех ABAP операторов в программе. Первым делом нужно создать вариант, в котором не будут объединяться измерения:
sat
Далее запускаем транзакцию SE38 через SAT с нашим вариантом:
satvar
После трассировки смотрим иерархию вызовов и ищем оператор MESSAGE:
satsearch
Результат:
satrestult
Щелкнув два раза по позиции, мы перейдем в нужное нам место. Данный способ не является оптимальным, т.к. в больших программах файл трассировки будет очень большим и его анализ затянется.
Способ шестой. Использовать транзакцию ST05. Порядок действий следующий:
  • Открыть две сессии в одной запустить ST05, во второй SE38 с неверным названием программы
  • Активируем трассировку
  • Запускаем программу в SE38
  • Деактивируем трассировку
Зная, что таблица с наименованиями программы называется PROGDIR, мы можем перейти в то место кода программы, где вызывается считывание данной таблицы. Предполагаем, что вызов сообщения о несуществующей программе будет где-то «рядом»:
st05
Как видим на рисунке, наше предположение было верным:
st05result

Комментарии

Популярные сообщения из этого блога

ABAP кратко

/h - start debugging  /hs - system debugging  /ha - debugging - no screens  l_         - локальная переменная с единственным значением lt_        - локальная таблица ls_       - локальная структура lr_        - локальная переменная типа Range lv_        - локальная переменная lty_     - локальный тип t_           - локальный тип p_        - параметр so_      - selection option <ls_>  - field symbol на структуру (все остальное по аналогии) lcl_      - локальный класс lo_       - объект rg_       - range range это внутренняя таблица, которая состоит из 4 полей: sign, options, low и high. По сути range это аналог select-options и заполняется точно также: SIGN = 'I' (включить) или 'E' (исключить), OPTIONS содержит о...

стандарт MM

Материал MM01 - Создание материала &   ME11 - Создание инфо-записи //внести артикул поставщика   CV04N - Поиск документа // сертификат смотреть здесь   MEK1 - Создание условий (закупки)   MR22 - Дебетование/кредитование материала   V/LD - Выполнение списка условий // просмотр (zs)   MM60 - Каталог материалов   Запас MB52 - Ведомость складских запасов // остатки, но сколько в резерве не указано   MB5B - Запасы на дату проводки // остатки на указанный период   MB5T - Запас в пути - БЕ // запас в пути   MMBE - Обзор запасов   Документ материала MB03 - Просмотреть документ материала   MB51 - Список документов материала // все движения по материалу (перемещения тут)   MBGR - Просмотреть ДокумМтрл к ПричДвижен //причина движения   MIGO - Движение материала ...

стандарт SD

Сбытовой заказ VA01 - Создание заказа клиента // возврат ZRE2   VK11 - Создать условие //ZSP1   V/LD - Выполнение списка условий // выгрузить прайс в эксель   VA05 - Список заказов VA05N - Список заказов   V.02 - Список неполных заказов   V_RA - Обработка отставаний: список выбора   Заявка ME51N - Создание заявки   ME55 - Групповое деблокирование заявок // для MM   ME54N - Деблокировать заявку //для MM   ME56 - Присвоение заявке источника поставки // присвоение договора   Печатные формы NACR - WFMC: ведение записей условий ВыхДок // привязать печатную форму   VL71 - ВыходДокументы из исходящих поставок // печать паллетного листа   Дебитор XD03 - Просмотр дебитора (центральный)   IDOC WE02 - Просмотреть IDOC   ...