В начале немного скучной теории…
Аксиома: В программах и в данных бывают ошибки
Ошибки могут проявляться по-разному, в зависимости от того, предугадал и предусмотрел ли разработчик возможность появления ошибки в данном месте программы. Программа может аварийно завершиться («упасть в дамп»), может выдать сообщение об ошибке или лог ошибок. А может тихо и незаметно испортить Вам данные. Или наоборот – ничего не делать, хотя должна.
Как только Вы заметили проявление ошибки, необходимо выяснить и устранить ее причину. Иногда о причине ошибки говорит сообщение, которое выводится на экран. В этом случае ошибку можно исправить, изменив исходные данные или настройки. Но очень часто сообщения либо нет, либо оно не информативное. В этом случае необходимо найти место в программе (а иногда и саму программу), в котором возникает ошибка.
Если произошло аварийное завершение, то в транзакции ST22 мы можем увидеть наш «дамп», в котором есть информация, как о месте возникновения ошибки, так и о значениях переменных в момент ошибки. Иногда этой информации достаточно, чтобы понять, почему она произошла. Но зачастую этого мало – тогда нам на помощь приходит отладка.
Если у нас есть сообщение с классом и номером сообщения (обычно их можно найти в переменных SY-MSGID, SY-MSGNO), то в транзакции SE91 можно попробовать найти места в программах, где это сообщение выводится. Иногда можно перейти в это место посмотреть на код и понять, почему возникла ошибка. Но часто таких место очень много. Или они не найдены – такое возможно потому, что ошибки могут генерироваться разными способами с динамическим формированием номера сообщения. В этих случаях также нужна отладка. Наконец, отладка нужна в том случае, если место возникновения ошибки неочевидно или известно только приблизительно.
Что представляет собой отладка программы
Чтобы ответить на этот вопрос, нужно в первую очередь понять, что компьютеры работают очень быстро. Гораздо быстрее мозга любого человека. Это позволяет им совершать ошибки с очень большой скоростью. Применительно к вопросу поиска причин ошибки это является негативным фактором, так как человек не в состоянии отслеживать состояние программы со скоростью компьютера.
Поэтому, помимо штатного режима работы на полной скорости, программы могут также работать в режиме отладки. Он отличается тем, что после выполнения каждого своего оператора, команды или функции программа приостанавливается и ждет дальнейших указаний от человека. В то время, пока программа остановлена, доступны для просмотра и анализа все переменные программы в текущей области видимости. И также возможен просмотр содержания таблиц в базе данных, стека вызовов (списка программных единиц, откуда мы попали в текущее место программы), состояния памяти и так далее. Более того, для переменных возможно изменение их значений (как правило, это недоступно на продуктивной системе или доступно, но не всем).
После анализа текущего состояния человек дает команду на выполнение следующей инструкции программы. Инструкция выполняется, и программа снова останавливается в ожидании дальнейших указаний. Таким образом можно выполнить всю программу. Этот процесс и называется