OxL Справочник OxL
РусскийEnglish

Отладка из редактора

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 по умолчанию — каталог пакета)
oxlProfiledev (по умолчанию), test, prod
oxlFormattersfalse — не загружать pretty-printers для str, List, Map, T?
stopOnEntryостановка в начале

Конфигурации#

VS Code (.vscode/launch.json, тип oxl даёт расширение):

json
{
  "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 — список задач и граф «кто кого ждёт»; припаркованные задачи видны как потоки.

Отладка одного теста#

sh
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, запись в аудит):

sh
./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.

См. также

OxL 1.0.0-beta · Версия документации 1.0.0-beta© OxwaldLink · сгенерировано из Стандарта, исходников std и руководства