Развертывание, запуск и отладка проекта MSBuild Linux

Поддержка Linux реализована в Visual Studio версии 2017 и выше. Чтобы увидеть документацию для этих версий, установите в расположенном над содержанием раскрывающемся списке Версия пункт Visual Studio 2017 или Visual Studio 2019.

После создания проекта Linux на основе MSBuild C++ в Visual Studio и подключения к проекту с помощью диспетчера подключений Linux можно запускать и отлаживать проект. Компиляция, выполнение и отладка кода осуществляются в удаленной системе.

Visual Studio 2019 версии 16.1 и более поздней. Вы можете использовать разные системы Linux для отладки и сборки. Например, при работе с Интернетом вещей можно выполнить компиляцию на платформе x64 и развернуть приложение на устройстве ARM. Дополнительные сведения см. в разделе Указание разных компьютеров для сборки и отладки далее в этой статье.

Существует несколько способов взаимодействия с проектом Linux и его отладки.

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

  • Просмотрите выходные данные целевого компьютера в окне консоли Linux. Консоль можно также использовать для отправки входных данных на целевой компьютер.

Отладка проекта Linux

  1. Выберите режим отладки на странице свойств Отладка.

    GDB используется для отладки приложений на платформе Linux. При отладке в целевой системе (не WSL) GDB может работать в двух разных режимах, которые можно указать с помощью параметра Режим отладки на странице свойств Отладка проекта:

    Снимок экрана: раздел

    GDB используется для отладки приложений на платформе Linux. GDB может работать в двух разных режимах, которые выбираются в параметре Режим отладки на странице свойств Отладка проекта:

    Снимок экрана: раздел

    • В режиме gdbserver GDB выполняется в локальной среде, подключенной к gdbserver в удаленной системе.

    • В режиме gdb в Visual Studio отладчик запускает GDB в удаленной системе. Это лучший вариант, если локальная версия GDB несовместима с версией, установленной на целевом компьютере. Это единственный режим, который поддерживает окно консоли Linux.

    Примечание

    Если не удается попасть в точки останова в режиме отладки gdbserver, попробуйте gdb режим. gdb сначала следует установить в удаленной целевой системе.

  2. Выберите удаленную целевую систему, используя стандартную панель инструментов Отладка в Visual Studio.

    Если удаленная целевая система доступна, вы определите ее по имени или IP-адресу.

    Снимок экрана: IP-адрес удаленной целевой системы.

    Если вы еще не подключились к удаленной целевой системе, вы увидите инструкции по использованию диспетчера подключений Linux для выполнения подключения.

    Снимок экрана: удаленная 64-разрядная архитектура.

  3. Задайте точку останова, щелкнув в левом поле код, который будет выполняться.

    В строке кода, где вы задали точку останова, появится красная точка.

  4. Нажмите клавишу F5 (или Отладка > Начать отладку), чтобы начать отладку.

    При запуске отладки приложение компилируется на удаленном целевом компьютере и после этого запускается. Ошибки компиляции будут показаны в окне Список ошибок.

    Если ошибок нет, приложение запустится, и по достижении точки останова отладчик остановится.

    Снимок экрана: приложение, достигшее точки останова.

    Теперь можно работать с приложением в его текущем состоянии, просматривать переменные и пошагово выполнять код, нажимая командные клавиши, такие как F10 или F11.

  5. Если для взаимодействия с приложением вы хотите использовать консоль Linux, выберите Отладка > Консоль Linux.

    Снимок экрана: пункт меню консоли Linux.

    Эта консоль отображает выходные данные консоли с целевого компьютера, принимает входные данные и отправляет их на целевой компьютер.

    Снимок экрана: окно консоли Linux.

Настройка других параметров отладки (проекты MSBuild)

  • Аргументы командной строки можно передать в исполняемый файл с помощью элемента Аргументы программы на странице свойств Отладка проекта.

  • Вы можете экспортировать переменную среды DISPLAY с помощью команды перед запуском на страницах свойств Отладка проекта. Пример: export DISPLAY=:0.0

    Снимок экрана: свойство

  • Специальные параметры отладчика можно передать в GDB с помощью записи Дополнительные команды отладчика. Например, можно игнорировать сигналы SIGILL (недопустимая инструкция). Для этого вы можете применить команду handle, добавив следующий текст в поле Дополнительные команды отладчика, как показано выше:

    handle SIGILL nostop noprint

  • Путь к файлу GDB, который используется Visual Studio, можно указать с помощью элемента GDB Path (Путь к GDB) на странице свойств Отладка проекта. Это свойство доступно в Visual Studio 2019 версии 16.9 и более поздних версий.

Отладка с использованием присоединения к процессу

Страница свойств Отладка для проектов Visual Studio и параметры Launch.vs.json для проектов CMake позволяют подключиться к выполняющемуся процессу. Если вам необходимы дополнительные возможности управления, помимо представленных в этих параметрах, можно поместить файл под названием Microsoft.MIEngine.Options.xml в корень решения или рабочей области. Вот простой пример:

<?xml version="1.0" encoding="utf-8"?>
<SupplementalLaunchOptions>
    <AttachOptions>
      <AttachOptionsForConnection AdditionalSOLibSearchPath="/home/user/solibs">
        <ServerOptions MIDebuggerPath="C:\Program Files (x86)\Microsoft Visual Studio\Preview\Enterprise\Common7\IDE\VC\Linux\bin\gdb\7.9\x86_64-linux-gnu-gdb.exe"
ExePath="C:\temp\ConsoleApplication17\ConsoleApplication17\bin\x64\Debug\ConsoleApplication17.out"/>
        <SetupCommands>
          <Command IgnoreFailures="true">-enable-pretty-printing</Command>
        </SetupCommands>
      </AttachOptionsForConnection>
    </AttachOptions>
</SupplementalLaunchOptions>

AttachOptionsForConnection имеет значительную часть атрибутов, которые могут потребоваться. В приведенном выше примере показано, как задать расположение для поиска дополнительных SO-библиотек. Дочерний элемент ServerOptions позволяет вместо этого подключиться к удаленному процессу с использованием gdbserver. Для этого необходимо указать локальный клиент gdb (экземпляр, предоставляемый с Visual Studio 2017, показан выше) и локальную копию двоичного файла с символами. Элемент SetupCommands позволяет передавать команды непосредственно в gdb. Все эти параметры доступны в схеме LaunchOptions.xsd на сайте GitHub.

Указание разных компьютеров для сборки и отладки в проектах Linux на основе MSBuild

Вы можете отделить удаленный компьютер сборки от удаленного компьютера отладки для любых проектов MSBuild и CMake, которые будут использоваться с удаленным компьютером Linux. Например, при работе с Интернетом вещей теперь можно выполнить компиляцию на платформе x64 и развернуть приложение на устройстве ARM.

По умолчанию удаленный компьютер отладки совпадает с удаленным компьютером сборки (настраивается в разделе Свойства конфигурации>Общие>Удаленный компьютер сборки). Чтобы назначить для отладки другой удаленный компьютер, щелкните правой кнопкой мыши проект в обозревателе решений и перейдите к разделу Свойства конфигурации>Общие>Удаленный компьютер отладки.

Снимок экрана: диалоговое окно

В раскрывающемся меню Удаленный компьютер отладки перечислены все созданные удаленные подключения. Чтобы добавить новое удаленное подключение, откройте раздел Средства>Параметры>Кроссплатформенные>Диспетчер подключений или выполните поиск по строке "диспетчер подключений" на панели быстрого запуска. Кроме того, новый удаленный каталог для развертывания можно указать на страницах свойств проекта (Свойства конфигурации>Общие>Каталог удаленного развертывания).

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

Снимок экрана: свойства файла main.cpp, выделено свойство Content со значением False.

Свойство Содержимое указывает, будет ли файл развертываться на удаленном компьютере отладки. Вы можете отключить развертывание полностью, перейдя в раздел Страницы свойств>Configuration Manager и сняв флажок Развернуть для соответствующей конфигурации.

В некоторых случаях может потребоваться более точный контроль над развертыванием проекта. Например, если некоторые файлы для развертывания расположены за пределами решения или вы хотите настроить несколько удаленных каталогов для разных исходных файлов или каталогов. Для таких случаев добавьте следующий блок кода один или несколько раз в файл с расширением .vcxproj, заменив в них строку example.cpp именами реальных файлов:


<ItemGroup>
   <RemoteDeploy Include="__example.cpp">
<!-- This is the source Linux machine, can be empty if DeploymentType is LocalRemote -->
      <SourceMachine>$(RemoteTarget)</SourceMachine>
      <TargetMachine>$(RemoteDebuggingTarget)</TargetMachine>
      <SourcePath>~/example.cpp</SourcePath>
      <TargetPath>~/example.cpp</TargetPath>
<!-- DeploymentType can be LocalRemote, in which case SourceMachine will be empty and SourcePath is a local file on Windows -->
      <DeploymentType>RemoteRemote</DeploymentType>
<!-- Indicates whether the deployment contains executables -->
      <Executable>true</Executable>
   </RemoteDeploy>
</ItemGroup>

Проекты CMake

Для проектов CMake, которые будут использоваться с удаленным компьютером Linux, можно указать новый удаленный компьютер отладки в файле launch.vs.json. По умолчанию значение remoteMachineName синхронизируется со свойством remoteMachineName из файла CMakeSettings.json, который обозначает удаленный компьютер сборки. Теперь эти свойства могут не совпадать, а значение remoteMachineName в файле launch.vs.json обозначает удаленный компьютер, который используется для развертывания и отладки.

Снимок экрана: файл launch_schema.json, в котором указан удаленный компьютер отладки CMake. Для параметра remoteMachineName задано значение ${debugInfo.remoteMachineName}.

IntelliSense предложит полный список всех установленных удаленных подключений. Чтобы добавить новое удаленное подключение, откройте раздел Средства>Параметры>Кроссплатформенные>Диспетчер подключений или выполните поиск по строке "диспетчер подключений" на панели быстрого запуска.

Если вам нужен полный контроль над параметрами развертывания, добавьте следующий блок кода один или несколько раз в файл launch.vs.json. Не забудьте заменить значения заполнителей реальными значениями.

"disableDeploy": false,
"deployDirectory": "~\foo",
"deploy" : [
   {
      "sourceMachine": "127.0.0.1 (username=example1, port=22, authentication=Password)",
      "targetMachine": "192.0.0.1 (username=example2, port=22, authentication=Password)",
      "sourcePath": "~/example.cpp",
      "targetPath": "~/example.cpp",
      "executable": "false"
   }
]

Дальнейшие действия

Дополнительно

Свойства отладки C++ (Linux C++)