From 45548997b818046438fcea9e669f6ff02a035ccb Mon Sep 17 00:00:00 2001 From: Sergey Maslenkov Date: Wed, 18 Sep 2024 20:03:07 +0000 Subject: [PATCH] =?UTF-8?q?=D0=9F=D1=80=D0=BE=20=D1=80=D0=B0=D0=B7=D1=80?= =?UTF-8?q?=D0=B0=D0=B1=D0=BE=D1=82=D0=BA=D1=83=20=D0=BA=D0=BE=D0=B4=D0=B0?= =?UTF-8?q?=20=D0=B8=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D1=83=20=D1=81=20?= =?UTF-8?q?=D0=BF=D1=80=D0=BE=D0=B5=D0=BA=D1=82=D0=B0=D0=BC=D0=B8=20=D0=B2?= =?UTF-8?q?=D0=BD=D1=83=D1=82=D1=80=D0=B8=20=D0=BA=D0=BE=D0=BD=D1=82=D0=B5?= =?UTF-8?q?=D0=B9=D0=BD=D0=B5=D1=80=D0=BE=D0=B2.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dev-inside-containers.md | 52 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 dev-inside-containers.md diff --git a/dev-inside-containers.md b/dev-inside-containers.md new file mode 100644 index 0000000..3373f90 --- /dev/null +++ b/dev-inside-containers.md @@ -0,0 +1,52 @@ +Про разработку кода в контейнерах — повседневную работу связанную с компиляцией исходного кода и запуском интерактивной отладкой. +### Использование возможностей `VSCode` +В оригинальной коммерческой версии `Visual Studio Code` есть возможность выполнять GNU/LLVM toolchain'ы внутри указанного контейнера. Реализуется эта функциональность прозрачной для пользователя установкой серверной части `Visual Studio Code` внутри контейнера, в процессе «подключения» к нему. + +Набор устанавливаемых `extensions` для может быть такой: +[Dev Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers), [clangd](https://marketplace.visualstudio.com/items?itemName=llvm-vs-code-extensions.vscode-clangd), [CMake](https://marketplace.visualstudio.com/items?itemName=twxs.cmake), [CMake Tools](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cmake-tools), [Code Runner](https://marketplace.visualstudio.com/items?itemName=formulahendry.code-runner),[CodeLLDB](https://marketplace.visualstudio.com/items?itemName=vadimcn.vscode-lldb) + +Быстрая установка возможна через «Launch VS Code Quick Open (`Ctrl+P`)»: +``` +ext install ms-vscode-remote.remote-containers +ext install llvm-vs-code-extensions.vscode-clangd +ext install twxs.cmake +ext install ms-vscode.cmake-tools +ext install formulahendry.code-runner +ext install vadimcn.vscode-lldb +``` + +В таких редакциях как `Code-OSS`, `VSCodium` и т.п. данная функциональность отсутствует и `marketplace` не содержит `Dev Containers`/`ms-vscode-remote.remote-containers`. + +#### Подключение к контейнеру +Один из вариантов подключиться к уже запущенному контейнеру: + - на вкладке `REMOTE EXPLORER` + - раскрыть список `Dev Containers` + - выбрать нужный и `Attach...` в контекстном меню + +Если это первое подключение к контейнеру, то `Visual Studio Code` спросит какие из уже установленных `extensions` включить/задействовать на серверной части внутри контейнера. Т.е. вкладка `EXTENSIONS` будет содержать не два, а три раскрывающихся списка. +### Запуск контейнера +Проекты открываются, собираются и отлаживаются совершенно прозрачно, если контейнер был создан с монтированием локальной директории хостовой машины: +```shell +docker run -ti --name "aaabuilder" -h="aaa" --mount type=bind,source=/home/имяпользователя/projects,target=/home/имяпользователя/projects registry.git.peresvet.it/system-trace/agent-enviroments:builder +``` +### Поддержка LSP-сервера +Про использование IDE/редакторов реализующих работу с синтаксисом через LSP-сервер `clangd`. +#### Установка `clangd` внутри `ALTLinux p10 +В образе `builder` на базе `ALTLinux p10` отсутствует `clangd`. Если установить 17-ю версию вручную (или же согласившись на предложение IDE), то установится так же и более древняя версия `clangd`, на которую, фактически, и будет указывать символьная ссылка `/usr/bin/clangd`. +Потому для разработки внутри контейнера требуется выполнить вручную порядок действий схожий с таким: +```shell +apt-get install clangd17.0 +rm /usr/bin/clangd +ln -s /usr/bin/clangd-17 /usr/bin/clangd +``` +#### Наличие файла `compile_commands.json` +В настройках `Visual Studio Code` есть возможность указать: +```json +"cmake.copyCompileCommands": "${workspaceFolder}/compile_commands.json", +``` +внутр файла `~/.config/Code/User/settings.json`. При успешном конфигурировании `cmake`-проекта файл `compile_commands.json` автоматически будет копироваться в корень проекта. + +При конфигурировании `Seastar` через `python`-скрипт генерация `compile_commands.json` обеспечивается использованием флага: +```shell +./configure.py ... --compile-commands-json +``` \ No newline at end of file