Skip to main content

Розробка з підсистемою Windows для Linux (WSL2)

Windows Subsystem for Linux (WSL2) дозволяє запускати середовище Linux безпосередньо в Windows без накладних витрат Hyper-V on Windows 10 або подвійного завантаження. Ви можете запускати багато інструментів командного рядка Linux, утиліт і додатків на спеціальній полегшеній віртуальній машині, що працює під управлінням Windows. На WSL2 можна запустити повну систему Fledge. Це включає Fledge GUI доступ до якого можна отримати з браузера, що працює в хост-середовищі Windows.

Microsoft's Visual Studio Code це кросплатформний редактор, який підтримує розширення для створення та налагодження програмного забезпечення різними мовами та середовищами. У цій статті описано, як налаштувати Visual Studio Code для редагування, створення та налагодження плагінів Fledge, написаних на C++, які працюють у Linux під WSL2.

Примітка

Можна налаштувати код Visual Studio для створення та тестування коду Python у WSL2, але це не розглядається в цій статті.

Підготовка середовища розробки

У цьому розділі описано кроки для налаштування WSL2 і середовища Linux.

Встановлення підсистеми Windows для Linux (WSL2)

Щоб встановити WSL2, у вас має бути Windows 10 версії 2004 і вище (Build 19041 і вище) або Windows 11. Найпростіший спосіб встановлення - відкрити командний рядок Windows від імені адміністратора і виконати цю команду:

wsl --install

Windows виконає всі необхідні кроки за вас. Вона встановить дистрибутив Linux за замовчуванням, яким є остання версія Ubuntu. Якщо ви бажаєте виконати ці кроки вручну або встановити дистрибутив Linux, відмінний від типового, зверніться до документації Microsoft на Installing WSL.

Після завершення встановлення дистрибутив Linux буде запущено у новому вікні. Вам буде запропоновано ввести ім'я користувача, який буде виконувати функції облікового запису root, і пароль. Це ім'я користувача не має нічого спільного з вашим середовищем Windows, тому це може бути будь-яке ім'я на ваш вибір.

Ви можете запустити дистрибутив Linux у будь-який час, знайшовши його у меню "Пуск" Windows. Якщо ви натиснете клавішу Windows і введете назву вашого дистрибутива Linux (за замовчуванням: "Ubuntu"), ви одразу побачите його.

Деякі корисні можливості WSL2

Дистрибутив Linux, що працює у WSL2, є легкою віртуальною машиною, але добре інтегрованою з середовищем Windows. Ось деякі корисні функції:

  • Вирізати і вставляти текст у вікно Linux і з нього: . Вікно Linux поводиться так само, як вікно командного рядка або вікно Powershell. Ви можете скопіювати текст з будь-якого вікна і вставити його у будь-яке інше.
  • Доступ до файлової системи Linux з Windows*: . Файлова система Linux відображається у Windows як мережевий диск. Відкрийте Провідник файлів Windows і перейдіть до "\\wsl$". Ви побачите ваші дистрибутиви Linux у вигляді мережевих папок.
  • Доступ до файлової системи Windows з Linux*: . У командному рядку bash перейдіть до точки монтування "/mnt". У цьому каталозі ви побачите літери ваших дисків Windows.
  • Доступ до середовища Linux з комп'ютера з Windows через мережу*: . У командному рядку bash виконайте команду hostname -I. Зовнішню IP-адресу, яку повертає ця команда, можна використовувати на комп'ютері з Windows для доступу до Linux.
  • Доступ до комп'ютера Windows із середовища Linux через мережу*: . З командного рядка bash виконайте команду cat /etc/resolv.conf. IP-адресу після мітки ім'я сервера можна використовувати у середовищі Linux для доступу до хоста Windows.

Підготовка дистрибутива Linux для Fledge

У дистрибутиві Ubuntu, що працює у WSL2, менеджер сервісів systemd не налаштовано за замовчуванням. Оскільки Fledge покладається на systemd, ви повинні запустити скрипт, щоб увімкнути його. З вашого домашнього каталогу у вікні Ubuntu введіть команди:

git clone https://github.com/DamionGans/ubuntu-wsl2-systemd-script.git
cd ubuntu-wsl2-systemd-script
bash ubuntu-wsl2-systemd-script.sh

Перезавантажте дистрибутив Ubuntu за допомогою sudo reboot або sudo systemctl reboot. Коли дистрибутив перезавантажиться, виконайте команду systemctl. Ви не повинні побачити жодних помилок і список одиниць. Скрипт має бути запущено лише один раз. Щоразу, коли ви запускаєте дистрибутив Ubuntu, systemd має бути готовий.

Всановлення Fledge

Дотримуйтесь звичайних інструкцій для Installing Fledge on Ubuntu. Переконайтеся, що репозиторій пакетів відповідає вашій версії Ubuntu. Ви можете перевірити версію операційної системи у своєму дистрибутиві за допомогою команди hostnamectl або cat /etc/os-release.

Встановлення Visual Studio Code

Перейдіть на Visual Studio Code сторінку в браузері Windows. Натисніть кнопку Download for Windows. Запустіть інсталятор, щоб установити Visual Studio Code.

Visual Studio Code доступний для Microsoft Windows, Apple MacOS та декількох дистрибутивів Linux. Не встановлюйте збірку Visual Studio Code для Linux у вашому дистрибутиві Linux у WSL2.. Ви фактично запускатимете Visual Studio Code для Windows зі свого дистрибутива Linux!

Запуск дистрибутива Linux

Виконуйте ці кроки щоразу, коли запускаєте дистрибутив Linux, якщо плануєте запускати Fledge:

Запуск системного журналу

Системний журнал /var/log/syslog не налаштовано на автоматичний запуск у дистрибутиві Linux у WSL2. Запустіть syslog за допомогою команди:

sudo service rsyslog start

Ви повинні робити це під час кожного запуску.

Запуск Nginx

Fledge використовує Nginx як веб-сервер для розміщення GUI Fledge. Якщо ви плануєте запустити Fledge GUI під час сеансу розповсюдження Linux, введіть команду:

sudo service nginx start

Ви повинні робити це під час кожного запуску, якщо плануєте запустити Fledge GUI.

Запуск Fledge

Запустіть Fledge як зазвичай. Ви можете запустити його зі звичайного каталогу запуску або зі свого каталогу збірки, дотримуючись вказівок на веб-сторінці Testing Your Plugin.

Запуск Fledge GUI

Якщо Nginx запущено, ви можете запустити графічний інтерфейс Fledge у браузері в середовищі Windows. Знайдіть зовнішню IP-адресу свого дистрибутива Linux за допомогою команди:

hostname -I

Ця адреса доступна з вашого середовища Windows. Скопіюйте IP-адресу на нову вкладку браузера і натисніть Enter. Ви повинні побачити сторінку Fledge GUI Dashboard.

Примітка

Зовнішня IP-адреса дистрибутива Linux (зазвичай) змінюється кожного разу, коли ви його запускаєте. Щоб отримати поточну IP-адресу, вам потрібно щоразу виконувати команду hostname -I.

Налаштування Visual Studio Code

У цьому розділі описано, як налаштувати Visual Studio Code для редагування, створення та налагодження проектів C++ Linux. Ці інструкції підсумовано з навчального посібника Visual Studio Code Using C++ and WSL in VS Code.

Встановлення розширень

Перейдіть до каталогу, що містить файли вихідного коду C++, і виконайте команду:

code .

Це запустить Visual Studio Code у вашому середовищі Windows, але переглядатиме поточний каталог у вашому дистрибутиві Linux. Оскільки ви запускаєте Visual Studio Code зі свого дистрибутива Linux, Code має запропонувати вам встановити два розширення:

Якщо запит не з'явиться, перейдіть за цими посиланнями, щоб встановити розширення і перезапустити Visual Studio Code. Якщо розширення встановлено і вони працюють, у лівому нижньому кутку вікна Visual Studio Code ви побачите зелену мітку з текстом WSL:, за яким слідує назва вашого дистрибутива Linux.

Налаштування вашого Робочого простору

Visual Studio Code називає ваш каталог файлів вихідного коду Workspace.. Для того, щоб редагувати, збирати та налагоджувати ваш код, ви повинні створити 3 Json файли у підкаталозі Workspace з назвою .vscode.:

  • c_cpp_properties.json: шлях до компілятора, налаштування IntelliSense та шляхи до включених файлів
  • tasks.json: інструкції по збірці
  • launch.json: налаштування відладчика

Ви можете створити ці файли вручну або скористатися майстрами конфігурації Visual Studio Code. У цих підрозділах описано створення та необхідний вміст кожного з цих трьох файлів.

Конфігурація редактора коду: c_cpp_properties.json

  • Відкрийте палітру команд за допомогою послідовності клавіш Ctrl+Shift+P.

  • Оберіть команду C/C++: Edit Configurations (JSON).

  • Це створить .vscode підкаталог (якщо він ще не існує) і файл c_cpp_properties.json .

  • Цей файл Json буде відкрито для редагування.

  • Ви побачите новий масив під назвою configurations з одним визначеним об’єктом конфігурації.

  • Ця конфігурація матиме масив рядків під назвою includePath.

  • Додайте шляхи до ваших власних файлів включення та шляхи, необхідні API Fledge, до масиву includePath.

  • Ви можете використовувати змінні середовища Linux у своїх шляхах. Наприклад:

    "${FLEDGE_ROOT}/C/common/include"
  • Ви можете знайти список включених файлів, виконавши команду make:

    make --just-print

яка перелічить усі команди, визначені make без їх виконання. Ви побачите список включених файлів у кожному екземплярі команди компілятора gcc.

Конфігурація збірки: tasks.json

  • У головному меню коду Visual Studio виберіть Terminal -> Configure Default Build Task.
  • У розкривному списку буде показано доступні завдання для проектів C++.
  • Оберіть g++ build active file.
  • Це створить .vscode підкаталог (якщо він ще не існує) і файл tasks.json .
  • Відкрийте файл Json для редагування.

Створення проекту здійснюватиметься за допомогою файлу make, а не компілятора gcc. Щоб внести цю зміну, відредагуйте записи command і args наступним чином:

"command": "make",
"args": [
"-C",
"${workspaceFolder}/build"
],

Аргумент "-C" для make переместить у вказаний каталог, перш ніж щось робити.

Ви можете будь-коли викликати збірку з Visual Studio Code за допомогою послідовності клавіш Ctrl+Shift+B.

Конфігурація відладчика: launch.json

  • У головному меню коду Visual Studio виберіть Run -> Add Configuration...
  • Оберіть C++ (GDB/LLDB).
  • TЦе створить .vscode підкаталог (якщо він ще не існує) і файл launch.json .
  • Відредагуйте файл launch.json, щоб він виглядав так:
{
"version": "0.2.0",
"configurations": [
{
"name": "Debug Plugin",
"type": "cppdbg",
"request": "launch",
"targetArchitecture": "x86_64",
"cwd": "${fileDirname}",
"program": "/full/path/to/fledge.services.north",
"externalConsole": false,
"stopAtEntry": true,
"MIMode": "gdb",
"avoidWindowsConsoleRedirection": false,
"args": [
"--port=42467",
"--address=0.0.0.0",
"--name=MyPluginInstance",
"-d"
]
}
]
}

Примітка

  • Атрибут program містить програму, яку має запустити налагоджувач gdb. Для розробки плагінів Fledge це або fledge.services.north, або fledge.services.south, залежно від того, який плагін ви створюєте. Ці службові виконувані файли динамічно завантажуватимуть вашу бібліотеку плагінів під час запуску.
  • Атрибут args містить аргументи, які зазвичай передаються виконуваному файлу сервісу. Оскільки TCP/IP порт змінюється при кожному запуску Fledge, ви повинні відредагувати цей файл, щоб оновити номер порту перед початком сеансу налагодження.

Розпочніть сеанс налагодження з головного меню коду Visual Studio. Оберіть Run -> Start Debugging чи натисніть клавішу F5.

Відомі Проблеми

  • Environment variables in launch.json: Підтримка змінних оточення в атрибуті program є непослідовною. Змінні, створені самим кодом Visual Studio, працюватимуть, але не працюватимуть користувацькі змінні оточення, такі як FLEDGE_ROOT.
  • gdb startup errors: Може статися так, що gdb зупиняється з помилкою 42 і негайно завершує роботу, коли ви починаєте сеанс налагодження. Щоб виправити це, вимкніть дистрибутив Linux і переінсталюйте Visual Studio Code у Windows. Ви не втратите налаштування конфігурації та встановлені розширення.
  • Inconsistent breakpoint lists: Visual Studio Code показує список точок зупинки у лівому нижньому кутку вікна. Налагоджувач gdb підтримує власний список точок зупину. Може статися так, що ці два списки не синхронізуються. Ви все одно можете створювати, переглядати і видаляти точки зупинки за допомогою вкладки Debug Console у нижній частині екрана, яка надає доступ до командного рядка gdb. Під час використання Debug Console перед усіма командами gdb слід ставити "-exec". Маніпулювання точками зупинки:
    • Встановіть точку переривання: -exec b назва функції.
    • Перегляд точок зупинки: -exec info b. Буде показано порядковий номер для кожної точки зупинки.
    • Видалення точок зупинки: -exec del ##. Використовуйте початковий номер, повернутий командою -exec info b, як "##".

Посилання