Отладка из редактора
oxl dap — тонкий прокси над lldb-dap: сообщения идут без изменений, кроме запуска программы и нескольких запросов OxL
(руководство по отладчику). Нужен lldb-18; найти lldb-dap помогают --lldb-dap <путь>, OXL_LLDB_DAP
или /usr/lib/llvm-18/bin/lldb-dap.
Параметры launch#
| Поле | Значение |
|---|---|
program | файл .oxl, каталог пакета (собирается oxl build --debug-info full) или готовый исполняемый файл |
args, env, cwd | как у любой DAP-конфигурации (cwd по умолчанию — каталог пакета) |
oxlProfile | dev (по умолчанию), test, prod |
oxlFormatters | false — не загружать pretty-printers для str, List, Map, T? |
stopOnEntry | остановка в начале |
Конфигурации#
VS Code (.vscode/launch.json, тип oxl даёт расширение):
{
"version": "0.2.0",
"configurations": [
{ "type": "oxl", "request": "launch", "name": "Debug OxL package", "program": "${workspaceFolder}" },
{ "type": "oxl", "request": "launch", "name": "Debug current file", "program": "${file}", "oxlProfile": "dev" }
]
}Остальные клиенты запускают команду oxl dap и шлют тот же launch: nvim-dap — Neovim, Helix — Helix,
Emacs — Emacs, JetBrains — LSP4IJ.
В отладчике работают: точки останова по строке, условные, по функции, логпоинты; стек, переменные и watch с значениями OxL;
специальные точки останова — rpc Users.get, msg Cart.add, step placeOrder#2, error PayError, panic (как function breakpoints);
консольная команда oxl tasks / oxl waits — список задач и граф «кто кого ждёт»; припаркованные задачи видны как потоки.
Отладка одного теста#
oxl test --exact "checkout empty cart" --debug # печатает команду lldb и готовую launch-конфигурацию VS Code
oxl test --exact "checkout empty cart" --debug=dap # адаптер DAP на stdin/stdout: launch без program запускает тест
oxl test --exact "checkout empty cart" --debug=lldb # lldb с pretty-printersВыбран должен быть ровно один тест; он собирается с -O0 и полной отладочной информацией.
Удалённый узел#
Работающий узел отлаживается по сети, напрямую или через кластер (mTLS, роль debug, запись в аудит):
./shop --debug-listen 0.0.0.0:2345 --role api # узел обслуживает отладчик на порту 2345
oxl debug attach 10.0.3.7:2345 --cert me.crt --key me.key --ca me.ca.crt # адаптер DAP на stdin/stdout
oxl keys issue --role debug --name alice # сертификат принципала
oxl debug enable --node api-2 --for 30m --cluster shop.internal:7000 --cert … --key … --ca …
oxl debug --node api-2 --cluster shop.internal:7000 --cert … [--all-stop|--non-stop] [--binary ./shop]oxl debug … — такой же DAP-адаптер, поэтому подключается к клиентам, которые умеют запускать команду адаптера (nvim-dap, Helix, dape,
LSP4IJ): в конфигурации command = "oxl", args = ["debug", "attach", "host:port", …]. Режим --non-stop останавливает только
задачу с точкой останова, остальные работают; распределённая остановка показывает стеки вызывающих узлов цепочки. Расширение
VS Code в этом выпуске поддерживает только запуск (launch) локальной программы; удалённую отладку из VS Code ведите через терминал
или клиент, умеющий запускать адаптер командой. Профилировщик узла — oxl prof cpu|heap|tasks.