Отладка
В этом разделе содержится информация о настройке и способах отладки проектов на базе Melezh
Включение отладки Melezh в контейнере
Работает в Melezh начиная с версии 0.9.0 при использовании OneScript Debug Adapter >=1.1.0
В Docker-образах Melezh по умолчанию прописан порт отладки 1931 для OneScript Debug Adapter. Этот порт необходимо прокинуть на локальную машину, после чего создать в VS Code launch.json следующего содержания:
{
"version": "0.2.0",
"configurations": [
{
"name": "Melezh Attach",
"type": "oscript",
"request": "attach",
"debugPort": 1831,
"pathsMapping": {
"remotePath": "/app",
"localPath": "D:/Repos/Melezh"
}
},
]
}
В процессе отладки база для расчета путей к модулям с точками останова определяется при помощи полей remotePath и localPath. Грубо говоря, отладчик заменяет в пути к файлу для отладки remotePath на localpath чтобы найти копию файла из контейнера на локальной машине. Это необходимо в связи с тем, что полный путь к файлу на машине и в контейнере будут отличатся. Например, при файле 'launch.json' из примера, модуль /app/my_extension/extension.os можно отладить на локальной машине, работая с модулем D:/Repos/Melezh/my_extension/extension.os в редакторе кода
В контейнере всегда присутствует директория /app - основной каталог рабочей области Melezh, где хранится файлы проекта, каталог логов и от которого считаются относительные пути в настройках и расширениях. Рекомендуется указать его как volume на локальной машине при создании контейнера и создать там подкаталог для расширений, которые необходимо отлаживать. При таком подходе в качестве remotePath и localPath можно указать пути монтирования volume, а изменения в расширения вносить прямо во время отладки в VS Code, применяя изменения без перезапуска сервера, путем обновления кэша по кнопке в Web UI (см. Панель расширений)
Отладка на локальной машине
Для начала отладки на локальной машине, вы можете либо запустить Melezh через адаптера в VS Code (процесс Melezh будет завершен по окончании отладки), либо, как и в случае работы с Docker контейнером, выделить постоянный порт для подключения к нему отладчика по необходимости
Для запуска отладки Melezh через VS Code, необходимо открыть основную директорию установки Melezh в редакторе и создать launch.json следующего содержания:
{
"name": "Отладка Melezh UI",
"type": "oscript",
"request": "launch",
"program": "${workspaceRoot}/core/Classes/app.os",
"args": ["ЗапуститьПроект", "--port", "1921", "--proj", "D:/test_proj.melezh"],
"cwd": "${workspaceRoot}",
"env": {},
"runtimeExecutable": null,
"runtimeArgs": [],
"debugPort": 2801
}
- В поле
programнеобходимо указать путь к файлуcore/Classes/app.osв каталоге Melezh - В поле
argsнеобходимо заменитьportиprojна свои порт запуска и путь к файлу отлаживаемого проекта соответственно
Если Melezh был установлен из установщика Windows или Linux пакета, то OneScript может отсутствовать на целевой машине в качестве отдельного приложения, прописанного в PATH. В таком случае, можно установить OneScript отдельно, либо прописать в поле runtimeExecutable путь к встроенному движку OneScript внутри Melezh
На Linux: usr/lib/oint/bin/oscript
На Windows: {Каталог установки oint}\OInt\share\oint\bin\oscript.exe
После запуска отладки в VS Code, можно устанавливать точки останова как в основных скриптах Melezh, так и в файлах пользовательских расширений
Для запуска Melezh с постоянным портом отладки, необходимо:
-
Если Melezh был уст ановлен из Windows установщика или Linux-пакета, то достаточно перед запуском
melezhустановить значение переменной окруженияMELEZH_DEBUGс предпочтительным номером порта, по которому отладчик будет доступен в дальнейшем -
Если Melezh был установлен как OPM пакет, то необходимо изменить файл
melezh.bat/melezh.shвOneScript/bin, добавив-debug -port="Номер порта" -noWaitмеждуoscriptи путем кapp.os. Например:
oscript -debug -port="1931" -noWait /usr/share/oint/lib/melezh/core/Classes/app.os "$@"
Подключиться к процессу для отладки после запуска Melezh можно при помощи Debug Adapter c launch.json следующего вида:
{
"name": "Подключение Melezh",
"type": "oscript",
"request": "attach",
"debugPort": 1931
}