Отладка приложений
Contents
Отладка приложений#
Логирование на сторону клиента#
Логирование позволяет отслеживать процесс выполнения запросов и подстановку параметров, последовательность вызова операций и открытия форм.
Для просмотра логов:
Зайдите в инструмент разработчика
В Google Chrome и Mozilla Firefox открывается поCtrl+Shift+i
Перейдите на закладку «Console»
Для изменения настроек логирования:
Нажмите на кнопку настроек
Кнопка с изображением шестеренки находится в правом верхнем углу экрана.Примечание
Отображение кнопки может быть выключено в настройках сервера.
Настройки логирования позволяют выбрать тип информации, отображаемой в логе(по умолчанию включены все):
Операции
SQL
Скрипт
Для логирования можно задать уровень (предполагается, что нижестоящие уровни выводят также данные по уровням, находящимся выше, за исключением OFF):
Наименование |
Описание |
---|---|
TRACE |
|
DEBUG |
|
INFO |
|
WARN |
|
ERROR |
|
OFF |
Отключение логирования |
Клиентское окно отладчика#
Дерево выборок#
Окно отладчика вызывается при нажатии сочетания клавиш
Ctrl+Shift+Alt+d
или Ctrl+Shift+Alt+w
.
В левой части расположена Иерархическая структура открытых выборок (включая выборки выпадающих списков). Со столбцами:
Системное имя отображения
Каноническое имя класса которому принадлежит выборка
Для выборок без отображается имя без окончания «Avi»
В правой части отображаются закладки с данными по выбранной в левой части выборке:
Атрибуты
Параметры фильтра
Параметры выборки
Операции
Отладочный макрос
Описание закладок#
Атрибуты#
На данной закладке отображаются данные по атрибутам из основного запроса выборки для того элемента, на котором находится фокус ввода. Данные не доступны для редактирования.
Атрибуты:
Системное имя
Системное имя атрибутаЗначение
Значение атрибутаТолько чтение
Признак того, что атрибут доступен только для чтенияВидимость
Флаг видимости атрибутаПорядковый №
Ширина
Тип данных
Наименование
Наименование атрибута
Параметры фильтра#
На данной закладке отображаются данные по параметрам фильтра, если фильтр доступен в выбранном отображении. Данные не доступны для редактирования.
Атрибуты:
Системное имя
Системное имя атрибута фильтраЗначение
Значение атрибута фильтраТолько чтение
Признак того, что атрибут фильтра доступен только для чтенияВидимость
Флаг видимости атрибута фильтраТип данных
Наименование
Наименование атрибута фильтра
Параметры выборки#
Закладка хранит список переменных, созданных в выборке, и параметров, переданных в выборку.
Системное имя
Системное имя параметра/переменнойЗначение
Значение параметра/переменнойТип данных
Тип данных параметра/переменной
Операции#
На данной закладке отображаются операции выборки (отображения), которые определены непосредственно в ней, либо унаследованы.
Системное имя
Системное имя операцииАктивность
Флаг активности операцииВидимость на ТБ
Флаг видимости операции на панели инструментовПорядковый №
Порядковый № операции на панели инструментов№ иконки
Номер картинки из коллекцииНаименование
Наименование операции
Отладочный макрос#
На данной закладке можно выполнять следующие действия:
open
Открытие выборки, пример выражения:ru.bitec.app.bs.Bs_PrjVer#List
openModal
Открытие выборки в модальном окне в режиме просмотра, пример выражения:ru.bitec.app.bs.Bs_PrjVer#List
doLookUp
Открытие выборки в модальном окне в режиме выбора, пример выражения:ru.bitec.app.bs.Bs_PrjVer#List
call
Вызов библиотечной операции, пример выражения:ru.bitec.app.btk.Btk_GroupLib#editGroups
Для каждого действия можно задавать список параметров для передачи в выборку/библиотечный метод
Ctrl+F9
- горячая клавиша для запуск макроса.
Запуск осуществляется от выборки, на которой находится фокус ввода.
Отладка сервера в среде IDE#
Запустите сервер приложения в режиме отладки \
Для настройки запуска сервера приложений из среды, смотрите раздел «Настройку рабочего места» в данной документацииУстановите точку останова в интересующем месте.
Откройте приложение в браузере.
Выберите необходимое приложение.
Выполните действие, которое вызовет отлаживаемый код.
Запуск jexl скрипта#
Позволяет запускать на отладку автономную бизнес логику.
Запуск jexl скрипта доступен в приложения «Настройка системы»
в меню Сервисы > Библиотека JEXL
Определение причины SQL-вызова из EclipseLink#
Для определения причины SQL-вызова из EclipseLink, поставьте точку остановки в методе
org.eclipse.persistence.queries.ObjectLevelReadQuery#executeInUnitOfWork:1219
Через стек вызова можно проследить, что является причиной вызова.
Определение списка загружаемых расширений (Xxx_YyExt)#
Для определения списка загружаемых расширений, поставьте точку остановки в методе:
ru.bitec.app.gtk.eclipse.api.ExtensionPoint#onCreate : 26
Отслеживания изменения атрибута класса.#
Для того чтоб поймать изменение любого атрибута объекта в коде поставьте точку остановки в методе (сеттер атрибутов)
ru.bitec.app.gtk.eclipse.rdb.EntityAro#_set : 280
По желанию можно добавить на точку условия.
Пример: key == 635651L && propertyName.equals("bBaseMsrItem")
635651L
- id объекта(Long)bBaseMsrItem
- название атрибута
Мониторинг производительности#
Для мониторинга производительности:
jmc.exe
jvisualvm.exe
pg_stat_statements
Jmc#
Входит в поставку JDK, имеет ограничения для коммерческого использования. Удобна тем что позволяет видеть снимки стека со строчками кода.
Позволяет искать узкие места в сервере приложения.
Jvisualvm#
Входит в поставку JDK. Позволяет искать узкие места в сервере приложения.
Снятие снимка#
Запустите jvisualvm
Откройте процесс для мониторинга \ Для этого в окне «Application», сделайте двойной клик по нужному приложению.
Начните запись снимка
Для этого на закладке «Sampler» в открытом процессе, нажмите кнопку «CPU»При необходимости, в открытом процессе, запустите задачу, которую вам нужно профилировать.
Остановите запись снимка
Перейдите к снимку для анализа
Для этого на закладке «Sampler/CPU Sampler» нажмите кнопку «Snapshot»
Примечание
Профилирования идет по java функциям.
Получение полного списка функций для класса#
Scala компилятор может генерировать служебные функции, которых не видно в исходном коде, однако знание их имени, может повысить локализацию узких мест.
Для получения соответствия анонимной функции и строчки кода в классе:
Запустите scala console
Откройте Run/Debug configuration
Пункт «Edit configuration» в списке с лева от кнопки «запустить» в менюНажмите добавить конфигурацию
Выберете «scala console»
Укажите модуль, для класса которого вы хотите посмотреть список служебных функций
Запустите консоль
Выполните команду
:javap –l ru.bitec.app.Модуль.Класс
JProfiler#
Jprofiler - это комплексный профилировщик Java. Интуитивный пользовательский интерфейс Jprofiler поможет устранить узкие места производительности, точно определить утечки памяти и понять проблемы многопоточности.
Дистрибутив: «ftp://ftp/pub/%23Distrib/IntelliJ%20IDEA/JProfiler/»
Установщик сам интегрируется с IntelliJ IDEA
pg_stat_statements#
Позволяет вести статистику запросов в базе.
Подробнее смотрите документацию postgresql
Мониторинг оперативной памяти#
Для мониторинга оперативной памяти в продакшене можно использовать
jcmd pid GC.heap_dump dumpFile
Для анализа файла, рекомендуется использовать:
Отладка в закрытых средах#
Отладка в Visual Studio Code#
Редактор VSCode с установленными расширениями является более легковесным средством отладки java-приложений по сравнению с ItelliJ IDEA и более удобным по сравнению с JDB.
Расширение vscode-gtk-debug применяется, в случае необходимости отладить приложение на сервере заказчика и при невозможности предоставить доступ к исходным кодам на рабочем месте.
Внимание
Не рекомендуется применять jvm отладчик на боевой базе, если есть такая возможность желательно запустить копию экземпляра сервера и отлаживать уже его. Отладчик может оказать негативное влияние на производительность сервера приложения.
В случае необходимости отлаживаться на боевом сервере обязательно задавайте в фильтрах поток отладки, в противном случае, возможно срабатывание точек прерывания в пользовательских сеансах, что внесет путаницу в отладку и приведет к зависаниям на стороне пользователей.
Настройка рабочего места#
Установите VSCode
Установите расширение (Extension) для отладки
Дистрибутив расширения размещён в подкаталоге, «plugins\vscode
vscode-gtk-debug-x.x.x.vsix»Запустите VSCode
На левой панели управления нажмите кнопку Extensions
Нажмите кнопку с тремя точками на заголовке открывшейся панели
В открывшемся меню выберите «Install from VSIX»Найдите и выберите файл дистрибутива расширения
vscode-gtk-debug-x.x.x.vsix
В списке установленных расширений появится «Global for Postgres Debugger»
Настройка рабочего каталога#
Для начала работы с VSCode необходимо открыть рабочий каталог.
Создайте пустой каталог в произвольном месте.
Перейдите в VSCode
Откройте созданный каталог
Выберете пункт менюFile > Open Folder...
и укажите созданный каталог.Переключитесь на закладку отладки.
Для этого нажмите кнопку «Run and Debug» в левой панелиСоздайте файл
launch.json
Кликните на ссылку «create a launch.json file».
В открывшемся выпадающем списке выберите тип «Gtk»
В результате, в каталоге будет создан.\vscode\launch.json
, содержащий конфигурацию подключения к отлаживаемому серверу Global, по умолчанию.
Измените значения параметров в соответствии с настройками вашего сервера приложений.
Параметры конфигурации для отладки:
hostname
Имя или IP отлаживаемого сервераport
Порт, открытый отлаживаемым сервером для подключения java-отладчика. Значение задаётся параметром при старте java-процесса сервера Global.java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=4000,suspend=n
threadPattern
RegExp-выражение фильтрующее имена потоков, доступных для срабатывания точек останова. По умолчанию, доступны все потоки пользовательских сессий.Внимание
Из конфигурации подставляются экранированные слэши. Выражение должно выглядеть:
ESession_\\d*
httpPort
Порт на котором запущен сервер Global. Обычно: 80 или 8080.httpUser
,httpPassword
Имя пользователя и пароль, которые будут использоваться для авторизации Rest-запросов к серверу Global, при получении декомпилированных текстов прикладных Java и Scala-классов.
Подключение отладчика к процессу сервера#
Для подключения java-отладчика, процесс сервера должен быть запущен с соответствующими параметрами:
java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=4000,suspend=n
Переключитесь в режим отладки нажатием кнопки «Run and Debug»
Запустите отладку
В случае успешного подключения к отлаживаемому процессу появится панель с командами отладчика а так же строка состояния изменит цвет. Смотрите Документацию по отладке VSCode
Получение текста прикладного класса#
Для установки точки остановки «Breakpoint», необходимо открыть в редакторе декомпилированный текст отлаживаемого класса. Получение текста класса не зависит от подключения отладчика к процессу сервера. Главное, что бы в конфигурации отладки были корректно указаны параметры подключения.
Нажмите комбинацию клавиш
Shift+Ctrl+P
.В открывшемся поле ввода наберите
Find Classes
Выберите найденную команду «Find Classes…»
В открывшемся поле ввода введите имя искомого класса и нажмите Enter
Буде выполнен Rest-запрос к серверу приложений, для получения списка имён классов, содержащих введённое имяВыберите искомое имя класса из отображённого списка
Если был найдено только одно имя, будет открыт декомпилированный текст класса без промежуточного выбора.
Декомпилированный текст класса содержит расширение *.gdc
(Global Decompiled Class).
Являются виртуальным и не сохраняются на диске.
Файл состоит из набора строк на которые можно ставить точки сохранения.
Каждая строка содержит имена методов, вызовы которых происходят на этой
строке исходного кода.
Задание точки остановки#
Для установки точки, щёлкните мышкой слева от номера требуемой строчки.
В списке «BREAKPOINS» появится информация об установленной точке. Точки могут устанавливаться до или после подключения отладчика к процессу сервера.
Срабатывание точки остановки#
При срабатывании точки остановки в одном из потоков, имя которого соответствует паттерну, произойдёт его остановка. В соответствующих фреймах будут отображены стек вызова и значения локальных переменных. Кликами по стеку, можно перемещаться между файлами.
Перемещение между классами#
Если установить курсор на имя класса или вызываемого метода и нажать F12
или Ctrl + Click
будет выполнена попытка перехода к файлу, где
объявлен класс.
Если не удастся однозначно определить класс по имени, будет открыт диалог выбора.
Замена декомпилированного текста на исходный код#
Скопируйте исходный код класса в буфер обмена и выполните вставку в соответствующий gdc-файл через контекстное меню
После вставки исходного кода возможно переключаться между исходным кодом и декомпилированным текстом кнопкой расположенной в заголовке файла.
Так же в заголовке файла находятся кнопки которые переключают режимы подсветки синтаксиса для соответствующего языка.
Отладка приложений в консоли jdb#
Используется если ошибка не повторяется в окружении с настроенной IDE и невозможна удаленная отладка.
Внимание
Штатный консольный отладчик не позволяет фильтровать поток для точки останова, так что полноценно работать на production сервере, с таким отладчиком нельзя
Внимания примеры приведены для операционной системы windows для Linux смотрите официальную документацию по jdb.
Убедитесь что процесс запущен с опциями позволяющими отладку:
-agentlib:jdwp=transport=dt_shmem,address=jdbconn,server=y,suspend=n
Запустите jdb
${jdk_home}\bin\jdb -attach jdbconn
Наберите help, для просмотра списка допустимых команд
Смотрите так документацию: ru.bitec.app.gtk.debug.Jdb
Список самых полезных команд
stop
Установка точки остановаwhere
Просмотр стэка потокаlocals
Печатает переменые в текущем фреймеdump this
Печатает текущий классnext
Выполняет строчку кодаcont
Продолжает выполнение