Удаленная разработка приложений Visual C++ из Linux

удаленной разработки on Linux С Windows легко выполнима через SSH.

однако, как насчет другого пути? Мне нужно создать и отладить приложение Visual C++ в Windows, но я хочу работать в системе Linux.

  1. кросс-компиляция через MinGW не работает из-за специфичных для MSVC библиотек
  2. Ubuntu на Windows-хорошее начало, но я хотел бы работать над реальной системой Linux
  3. RDP / VNC или что-то еще как будто это тоже не помогает, потому что, чем я буду работать на Windows снова
  4. так делает виртуальная машина

может быть, что-то вроде Powershell на Linux + SSH для Windows Powershell?

2 ответов


Я регулярно разрабатываю приложения Visual C# удаленно из Linux, по большей части не MSVC, но, как и вы, я хотел найти способ создания и отладки целевых приложений и библиотек Windows на удаленных машинах Windows, не работая непосредственно в поле с помощью RDP, Visual Studio и т. д.

трудно ответить на этот вопрос без дополнительной информации о средствах разработки и отладки, которые вы предпочитаете использовать в Linux для типов разрабатываемых приложений. Я попробуйте предоставить общий обзор и обновить ответ для деталей, которые вы добавляете о своем рабочем процессе.

Cygwin, как MinGW в это префикса msys, предоставляет Unix-подобную среду для Windows. Самое главное, Cygwin, в отличие от MinGW/MSYS, включает в себя реализацию сервера OpenSSH, который позволяет нам подключаться к окну Windows через SSH из Linux (или любого другого устройства с SSH-клиентом, действительно). Мы можем установить демон пакет с использованием Cygwin утилита настройки. После подключения Cygwin по умолчанию сбрасывает нас в оболочку Bash. С этой возможностью мы можем:

  • выполнение удаленных команд и скриптов через SSH.
  • редактирование файлов с помощью нашего любимого текстового редактора командной строки *nix (Vim,Emacs и т. д.)
  • локальное подключение удаленных файловых систем с помощью SSHFS (если общие ресурсы Windows недоступны).
  • форвард или порты тоннеля если нужно.

наличие оболочка общего назначения делает почти все возможно. Мы можем выполнять пакетные файлы, сценарии PowerShell и собственные исполняемые файлы Windows из среды оболочки Cygwin в дополнение к сценариям Linux и программам Cygwin.

например, мы могли бы выполнить в MSBuild из командной строки сеанса SSH для создания нашего приложения VC++ или мы могли бы настроить наш локальный редактор GUI или IDE, работающий в Linux, чтобы выполнить в MSBuild через SSH когда мы нажимаем кнопку" построить".

мы могли бы настроить аналогичную среду в последних версиях Windows, используя Подсистема Windows для Linux ("WSL", Bash на Windows). Я лично предпочитаю Cygwin для большей переносимости и простоты настройки. По Cygwin демон может работать как служба Windows, и, как установленный проект, Cygwin интегрируется очень хорошо С системами Windows (учетные записи пользователей, файловые системы, API Windows, так далее.).

работа с кодом

мы можем выбрать один из нескольких рабочих процессов в зависимости от наших инструментов и уровня комфорта с помощью командной строки:

  1. полностью текстовая-вся работа выполняется через сеанс SSH
  2. используйте локальные инструменты для файлов, установленных в удаленной файловой системе
  3. используйте локальные инструменты и синхронизируйте файлы

Я использую первый подход. Я тяжелый пользователь Vim, поэтому я подключаюсь к Машины Windows через SSH для выполнения моей работы в командной строке с помощью инструментов и среды, предоставляемых Cygwin. Доступность инструментов, обычно найденных в Linux, упрощает многие задачи, которые трудно выполнить с консоли Windows по умолчанию. Мы можем писать сценарии оболочки для автоматизации задач, которые обычно выполняет Visual Studio. Например, я написал сценарий обертки вокруг действия MSTest который читает результаты теста XML и выводит их в формате, который легко читать в терминале.

Если мы предпочитаем использовать редактор GUI или IDE, мы можем монтировать удаленный код локально, чтобы инструменты могли читать и писать файлы, как если бы они были частью локальной файловой системы Linux. Вероятно, нам все еще нужно использовать SSH для выполнения команд, необходимых для создания проектов, но многие редакторы позволяют нам настроить эту команду как действие "сборки" проекта.

иногда удаленная файловая система слишком медленная для эффективного редактирования. В этих случаях, мы можем синхронизировать файлы между Машина разработки Linux и хост Windows с помощью такого инструмента, как rsync или функция "загрузить при сохранении" редактора (например, через SFTP), если она доступна.

отладка

все работает довольно хорошо, пока мы не попытаемся найти способ отладки наших приложений. На данный момент, есть никакой разумной замены для отладчика Visual Studio при работе с проектами Visual C++. Мы можем отлаживать управляемые приложения C#, работающие на CLR с помощью MDbg, но для программ на C++ не существует сопоставимого инструмента.

мы можем попробовать использовать gdb (от MinGW, Cygwin и др.) для базовой, низкоуровневой отладки собственных двоичных файлов, таких как чтение адресов памяти, но отладчик еще не поддерживает чтение символов отладки Microsoft, поэтому опыт отладки очень ограничен. Корпорация Microsoft начал документировать формат PDB пару лет назад, поэтому мы можем увидеть некоторую совместимость в будущем. Несмотря на это, потребуется много времени, чтобы создать удовлетворительную альтернативу отличным средствам отладки Visual Studio.

для отладки RDP в настоящее время является нашим лучшим-и, вероятно, единственным-вариантом. Для более родного ощущения мы можем запустить Visual Studio с помощью rdesktop (или другой клиент RDP) и seamlessrdp чтобы создать однооконный сеанс RDP среды IDE Visual Studio вместо полного рабочего стола, который интегрируется с любым оконным менеджером, мы используя в Linux.

иногда мы можем обойти запуск полного сеанса отладки Visual Studio для простых сценариев отладки, добавив трассировку в наше приложение, которое выводит значения в консоль или в файл журнала. Во многих случаях это быстрее, чем запуск отладчика в любом случае.

мы также можем попробовать использовать отладчик CDT Eclipse настроено для цепочки инструментов Visual C++. Это может позволить нам выполнить удаленную отладку с помощью экземпляра Eclipse на Linux-машина. Я никогда не пробовал этот подход, и я ожидаю, что могут возникнуть некоторые проблемы, когда приложение связано с библиотеками Microsoft.


Я не знаю всех ваших требований, но, возможно, вы могли бы использовать gdbserver в Windows (из MinGW) и удаленную отладку из VSCode в Linux - или в любой другой среде, которая вам нравится. Вы можете найти более подробную информацию в этом посте здесь. (Следите, VSCode предотвращает запуск gdb, если он не подписан, как указано в первой ссылке.)
Существует также Родной Отладки расширение VSCode, которое может быть полезно.

другое решение, которое я могу придумать, - использовать Visual Studio Online (бесплатно для небольших команд до 5 человек) в качестве сервера сборки.

Как вы сказали, наоборот довольно легко и сегодня даже официально поддерживается по Visual Studio 2017.

скорее всего, VS инструменты удаленной отладки для Windows не будет полезно для вас.