Розширення Visual C++ for Development Linux

Розширення Visual C++ for Development Linux дозволяє створювати рішення на C++ для серверів, настільних ПК і пристроїв під управлінням Linux. Керувати підключеннями до них можна безпосередньо в Visual Studio. VS буде автоматично копіювати і віддалено збирати вихідний код програм. Також середовище дозволяє запустити вашу програму в режимі налагодження. Система управління проектами підтримує створення рішень для конкретних архітектур, в тому числі APM. Під катом ми розповімо, як почати роботу з новими проектами для Linux.



Поки розширення підтримує тільки віддалену збірку на цільовому комп'ютері з Linux. Обмежень на дистрибутив Linux немає, але в системі повинні бути встановлені певні інструменти. Зокрема, вам будуть потрібні openssh-server, g++, gdb і gdbserver. Встановіть їх за допомогою будь-якого диспетчер пакетів. Наприклад, в системах, заснованих на Debian, для цього можна скористатися командою:

sudo apt-get install openssh-server g++ gdb gdbserver

Зміст
  1. Установка
  2. Ваш перший Linux-проект VS
  3. Властивості проектів Linux
  4. Вікно консолі
  5. IoT-проекти для Linux
  6. Як працювати з платою Intel Edison допомогою розширення VC++ for Linux
  7. Класичні програми
  8. Шаблон проекту Makefile
  9. Поради щодо використання
  10. Докладний журнал складання
  11. Де взяти підключаються файли
  12. Управління копіюванням видалених файлів
  13. Перевизначення шляху до компілятор C/C++
  14. Події складання
  15. Варіанти налагодження
  16. Корисні посилання
Установка
Скачайте розширення Visual C++ for Development Linux або виберіть його за допомогою диспетчера розширень Visual Studio.

Щоб почати роботу, створіть новий проект і виберіть Templates > Visual C++ > Cross Platform > Linux.



На даний момент доступні три шаблону: Blink (для пристроїв Інтернету речей — наприклад, Raspberry Pi), Console Application (консольний додаток, практично порожній каркас для вашого коду) і Empty (порожній шаблон для самостійного додавання файлів з вихідним кодом і налаштувань).

Ваш перший Linux-проект VS
Для початку створимо консольний додаток. Створіть проект на основі цього шаблону і додайте точку зупину на рядку printf. Потім натисніть F5 або кнопку Remote GDB Debugger. За замовчуванням для консольного додатка буде обрана конфігурація debug/x64. Якщо архітектура віддаленого цільового комп'ютера — x86 або ARM, ці настройки потрібно буде змінити. У цьому прикладі я буду використовувати віртуальну машину x64 Ubuntu.



Оскільки ми вперше збираємо рішення для комп'ютера з Linux, середа запросить відомості про підключення. Відповідна форма відкривається при спробі складання проекту.



Додаток підтримує авторизацію по паролю або сертифікату, в тому числі за допомогою парольних фраз з сертифікатами. Інформація про успішне підключення зберігається для наступних підключень. Щоб керувати збереженими з'єднаннями, виберіть Tools → Options → Cross Platform → Linux. Так, паролі і парольні фрази зберігаються в зашифрованому вигляді. В майбутньому оновленні ми збираємося додати можливість підключення без збереження даних про нього.

Після підключення ваші файли з вихідним кодом будуть скопійовані на віддалений комп'ютер Linux, і розширення запустить gcc для їх складання з параметрами, зазначеними у властивостях проекту. Після успішного складання ваш код запуститься на віддаленій машині і буде працювати, поки не досягне раніше заданої точки зупину.



Властивості проектів Linux
Щоб зрозуміти, де саме на віддаленому комп'ютері Linux розгортаються файли, заглянемо в властивості проекту.



Як зазначено у Remote settings, за замовчуванням у якості кореневої папки на віддаленому комп'ютері використовується каталог ~/projects/, а ім'я віддаленого каталогу проекту відповідає назві нашого проекту. Якщо ми переглянемо вміст каталогів на віддаленому комп'ютері Linux, то знайдемо main.cpp та файли, згенеровані в процесі складання, в папці ~/projects/ConsoleApplication1.



У розділі General вказані шляху до вихідного каталогу і проміжним файлів. Крім того, як ви бачите, для проекту заданий тип конфігурації Application. Тому виконуваний файл зберігається в каталог bin/x64/Debug/ під ім'ям ConsoleApplication1.out. Зверніть увагу: доступні два інших типи конфігурації — статична і динамічна бібліотека.

Вікно консолі
Працювати з віддаленими виконуваними файлами можна через вікно консолі. В цьому вікні можна переглядати результат роботи програми і вводити вхідні дані. Щоб активувати вікно, виберіть Debug → Linux Console. Ось як це виглядає на практиці.



Нижче наводиться код простої програми — скористайтеся ним, щоб попрацювати з консоллю самостійно.

#include <cstdio>

void log(char filename[], char visitor[])
{
FILE * pLog;
pLog = fopen(filename, "a");
if (pLog != NULL)
{
fputs(visitor, pLog);
fputs("\n", pLog);
fclose(pLog);
}
}

int main(int argc, char* argv[])
{
if (argc != 2) 
{
printf("Please pass filename as input parameter\n");
return 1;
}
char input[20];
printf("What IDE are you using?\n");
scanf("%19[0-9a-zA-Z ]", input);
printf("%s! You can use that with me?!\n", input);
log(argv[1], input);
return 0;
}

У властивостях проекту на сторінці Debugging в поле Command Arguments вкажіть ім'я файлу. На цій сторінці також можна змінити робочу теку, якщо ваш домашній каталог з якоїсь причини не підходить.



IoT-проекти для Linux
Тепер розглянемо роботу з пристроєм Інтернету речей — Raspberry Pi. Розширення підтримує будь-які пристрої Pi під управлінням Raspbian. У нашому шаблоні Blink ми будемо використовувати wiringPi — якщо у вас немає такої системи, її можна встановити через apt або з вихідного коду. Щоб додати підключення, виберіть Tools → Options і введіть у поле пошуку Linux. Тепер натисніть Add, щоб підключитися до пристрою Raspberry Pi.



Відкрийте властивості проекту і в розділі Build Events знайдіть категорію Remote Post-Build Events.



У цих параметрах можна вказати виконання команди на віддаленому комп'ютері Linux після завершення складання. Даний шаблон спочатку налаштований так, щоб експортувати контакт GPIO для світлодіодного індикатора — завдяки цьому виконуваний файл не потрібно запускати як корінь.

Тепер підключіть до контакту 17 вашого Raspberry Pi світлодіодний індикатор, як показано нижче.



Відкрийте файл main.cpp і задайте точку зупинки для виклику delay після першої інструкції digitalWrite. Натисніть F5. При досягненні точки зупину виконання призупиниться. При цьому світлодіод буде горіти. Продовжите виконання коду до наступного виклику digitalWrite. На ньому світлодіод згасне.

Як працювати з платою Intel Edison допомогою розширення VC++ for Linux
Робота з платою Intel Edison допомогою розширення VC++ for Linux практично не відрізняється від використання інших систем Linux. В першу чергу необхідно налаштувати плату відповідно до інструкціями від Intel. Після приєднання Edison до мережі Wi-Fi ви зможете підключитися до нього за допомогою нашого диспетчера підключень. Якщо потрібно під'єднатися до Edison безпосередньо, скористайтесь інструкціями по підключенню до Edison допомогою Ethernet через USB — наш диспетчер підключень підтримує такий варіант.

Edison дозволяє з легкістю почати створювати IoT-додаток, який обробляє дані від датчиків. Такі пристрої, як плати розширення Arduino, дозволять без проблем підключати додаткові модулі, наприклад, плату розширення Grove від Seeed Studios. Ця плата розширення допоможе працювати з безліччю доступних датчиків Grove, не піклуючись про розведення проводів для підключення до макетної платі, — ви зможете відразу приступити до написання коду. Компанія Intel випустила бібліотеку датчиків UPM, яка робить завдання ще простіше: вона забезпечує підтримку широкого спектру датчиків, в тому числі Grove.

На зображенні показаний обчислювальний модуль Edison на схемі Arduino з приєднаною платою розширення Grove і підключеним датчиком температури.



Створіть в Visual Studio новий проект. ВиберітьVC++ → Cross Platform → Linux → Empty Project. При складанні рішень для Edison в якості платформи рішення потрібно вибрати x86. Додайте в проект файл C++. Скористайтеся кодом з прикладу Grove Temperature Sample від Intel. Бібліотеки UPM включені в образ Yocto Linux, який використовується в Edison за промовчанням, тому їх додатково встановлювати не потрібно. Змініть параметри include, вказавши відповідне розташування файлів.

#include <upm/grove.h>

Після цього код можна буде зібрати і виконати. Тут показаний результат роботи цього прикладу в режимі налагодження Visual Studio. Можливо, вас збентежила перший рядок виводу. Справа в тому, що перша спроба читання даних з датчиків цього типу зазвичай дає не зовсім точний результат.



Щоб включити IntelliSense, дотримуйтесь інструкцій нижче. Вам потрібно скопіювати підключаються файли з Edison в локальну середу. Поки IntelliSense працює з помилкою, яка проявляється в цьому прикладі. В майбутньому оновленні це буде виправлено.

Класичні програми
Отже, ми розглянули створення додатків для систем без моніторів і для спеціалізованих пристроїв під управлінням Linux. Але як же настільні ПК? Ми підготували для вас дещо особливе. Зараз ми запустимо додаток OpenGL на настільному ПК під управлінням Linux. Спочатку переконайтеся, що ваш ПК із Linux належним чином налаштований для розробки OpenGL-рішень. Ми використовували наступні пакети apt: libgles1-mesa, libgles1-mesa-dev, freeglut3, freeglut3-dev.

Тепер створіть порожній Linux-проект і скачайте вихідний код Spinning Cube посилання з навчальної статті Жюльєна Герто (Julien Guertault) про OpenGL. Розпакуйте архів і додайте main.c в ваш проект. Для використання технології IntelliSense вам потрібно додати відмінності файли OpenGL каталоги VC++. Завантажити їх можна з реєстру OpenGL. Тепер відкрийте властивості проекту і в полі Pre-Launch Command введіть «export DISPLAY=:0.0».



У полі Linker Input вкажіть залежності бібліотек: «m;GL;GLU;glut».

Переконайтеся, що у налаштуваннях віддаленого підключення вказаний потрібний комп'ютер.



Тепер натисніть F5.



Щоб отримати цікаві результати, можна помістити точку зупину приблизно на рядок 80, де задається обертання куба (спробуйте змінити значення alpha), або на виклик KeyboardFunc, де можна переглядати значення натиснутою клавіші.

Шаблон проекту Makefile
Шаблон проекту Makefile дозволяє використовувати на віддаленому комп'ютері зовнішні системи збирання (make, gmake, CMake, сценарії bash тощо). Це працює приблизно так: на сторінці властивостей проекту C++ ви можете налаштувати локальні шляху Intellisense, потім на сторінці властивостей віддаленої складання додати команди (розділені крапкою з комою), ініціюють вашу збірку на віддаленому комп'ютері. У цьому прикладі ми переходимо у віддалений каталог, де знаходиться сценарій збірки, і запускаємо його.

Тут об'єднано кілька сценаріїв bash, які здатні генерувати проект файлу makefile на основі ваших файлів з вихідним кодом з урахуванням структури каталогів. У цих сценаріях передбачається, що вихідний код на комп'ютері Linux знаходиться в каталозі, який призначено Windows. Вони встановлюють новий прапор у властивостях проекту, щоб не копіювати файли віддалено. Навряд чи такий варіант підійде для всіх завдань, але він повинен стати гарною відправною точкою для великого проекту.



Поради по використанню
Поради з цього розділу допоможуть вам ефективніше використовувати розширення.

Докладний журнал складання

Було безліч питань про те, які саме аргументи передаються GCC. Вихідні дані, які ми бачимо при складанні, не дають потрібної інформації, але є два способи це виправити. Виконайте пошук за словом «багатослівність» у вікні швидкого введення або виберіть Tools → Options → Projects and Solutions → Build and Run. Для налаштування MSBuild Project output багатослівність виберіть значення diagnostic. Тоді у вікні виводу при складанні буде відображатися найбільш повна інформація. Так ви зможете дізнатися, які саме аргументи були передані GCC при складанні програми. Ця інформація може стати в нагоді, якщо програма працює некоректно.

Де взяти підключаються файли

Всі люблять IntelliSense, але синхронізацію підключаються файлів з вашої системи Linux ми поки не реалізували. Всі передають і копіюють ці файли по-своєму, і це добре. Ми розповімо про дуже простий спосіб: просто копіюйте всю папку в локальну систему Windows через PSCP.

pscp -r root@192.168.2.15:/usr/include .

Тепер відкрийте властивості проекту, перейдіть в розділ VC++ Directories і додайте локальний шлях.

Управління копіюванням видалених файлів

На рівні файлів і проектів можна вказати, чи потрібно віддалено копіювати файл. Завдяки цьому ви можете використовувати наявні механізми складання, просто порівнявши існуючі ресурси локально та додавши їх у ваш проект для редагування і відладки.



Перевизначення шляху до компілятор C/C++

У вікні Property Pages ви можете перевизначити команди компілятора, які будуть використовуватися на віддаленому комп'ютері. Так при необхідності ви зможете вибрати конкретні версії GCC або навіть інший компілятор — наприклад, clang. Можна вказати повні шляхи, так і доступні команди.



Події складання

У розділі Build Events властивостей проекту доступні нові типи подій — запускаються перед складанням і компонуванням, а також засоби копіювання довільних файлів при будь-яких подіях складання. З допомогою цих інструментів ви можете гнучко управляти процесом.



Варіанти налагодження

Розширення підтримує не тільки gdbserver, але і режим gdb, який дозволяє підвищити сумісність, якщо відповідних бінарних файлів клієнта gdb для віддаленої мети в Windows немає.



Крім того, ви можете перевизначити саму команду відладчика. Це зручно для налагодження зовнішніх програм, збірка яких була виконана не в VS.



На сторінці Debugging у властивостях проекту ви можете вказати додаткові команди gdb, які будуть передані відладчику перед початком його роботи. Це може знадобитися, наприклад, при розробці IoT-проектів Azure. При використанні Azure SDK IoT C на Raspberry Pi при запуску відладки може бути згенеровано некоректне виняток. Причина полягає в особливостях взаємодії між libcrypto і gdb. Обговорення цього питання доступно тут. Ви можете просто продовжити налагодження або взагалі уникнути цієї проблеми, передавши налагоджувач до початку роботи спеціальну інструкцію — в цьому випадку «handle SIGILL nostop noprint».



Корисні посилання
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.