Развертывание, запуск и отладка проекта 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
Выберите режим отладки на странице свойств Отладка.
GDB используется для отладки приложений на платформе Linux. При отладке в целевой системе (не WSL) GDB может работать в двух разных режимах, которые можно указать с помощью параметра Режим отладки на странице свойств Отладка проекта:
GDB используется для отладки приложений на платформе Linux. GDB может работать в двух разных режимах, которые выбираются в параметре Режим отладки на странице свойств Отладка проекта:
В режиме gdbserver GDB выполняется в локальной среде, подключенной к gdbserver в удаленной системе. Для этого необходимо предоставить локальный путь к GDB в поле Путь отладчика в Visual Studio 2022 версии 17.6 или более поздней или в поле Путь GDB в Visual Studio 2019 версии 16.11 и более ранней. Для получения дополнительной информации о том, где можно указать путь к GDB для проектов CMake, см. дополнительные параметры, доступные с конфигурацией gdbserver (версии 16.7 или выше).
В режиме gdb в Visual Studio отладчик запускает GDB в удаленной системе. Это лучший вариант, если локальная версия GDB несовместима с версией, установленной на целевом компьютере. Это единственный режим, который поддерживает окно консоли Linux.
Примечание.
Если не удается попасть в точки останова в режиме отладки gdbserver, попробуйте gdb режим. gdb сначала следует установить в удаленной целевой системе.
Выберите удаленную целевую систему, используя стандартную панель инструментов Отладка в Visual Studio.
Когда удаленный целевой объект доступен, вы увидите его по имени или IP-адресу:
Если вы еще не подключены к удаленному целевому объекту, вы увидите инструкции по использованию диспетчера подключений Linux для подключения к удаленному целевому объекту:
Задайте точку останова, щелкнув в левом поле код, который будет выполняться. В строке кода, где вы задали точку останова, появится красная точка.
Нажмите клавишу F5 (или Отладка > Начать отладку), чтобы начать отладку.
При запуске отладки приложение компилируется на удаленном целевом компьютере и после этого запускается. Любые ошибки компиляции появляются в окне списка ошибок .
Если ошибки отсутствуют, приложение запускается и отладчик приостанавливается в точке останова:
Теперь можно работать с приложением в его текущем состоянии, просматривать переменные и пошагово выполнять код, нажимая командные клавиши, такие как F10 или F11.
Если для взаимодействия с приложением вы хотите использовать консоль Linux, выберите Отладка > Консоль Linux.
Эта консоль отображает выходные данные консоли с целевого компьютера и принимает входные данные и отправляет его на целевой компьютер.
Настройка других параметров отладки (проекты MSBuild)
Аргументы командной строки можно передать в исполняемый файл с помощью элемента Аргументы программы на странице свойств Отладка проекта.
Вы можете экспортировать переменную среды
DISPLAY
с помощью команды перед запуском на страницах свойств Отладка проекта. Например:export DISPLAY=:0.0
Специальные параметры отладчика можно передать в GDB с помощью записи Дополнительные команды отладчика. Например, можно игнорировать сигналы SIGILL (недопустимая инструкция). Вы можете использовать команду дескриптора , чтобы достичь этого, добавив следующее в запись дополнительных команд отладчика, показанную выше:
handle SIGILL nostop noprint
.Укажите путь к GDB, используемому Visual Studio, с помощью элемента Путь к 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.
По умолчанию удаленный компьютер отладки совпадает с удаленным компьютером сборки (настраивается в разделе Свойства конфигурации>Общие>Удаленный компьютер сборки). Чтобы указать новый удаленный компьютер отладки, щелкните правой кнопкой мыши на проекте в обозревателе решений и перейдите к Свойства конфигурации>Отладка>Удаленный компьютер отладки:
В раскрывающемся меню Удаленный компьютер отладки перечислены все созданные удаленные подключения.
Чтобы добавить новое удаленное подключение, откройте раздел Средства>Параметры>Кроссплатформенные>Диспетчер подключений или выполните поиск по строке "диспетчер подключений" на панели быстрого запуска. Кроме того, новый удаленный каталог для развертывания можно указать на страницах свойств проекта (Свойства конфигурации>Общие>Каталог удаленного развертывания).
По умолчанию на удаленном компьютере отладки развертываются только файлы, необходимые для отладки процесса. С помощью обозревателя решений
Свойство Содержимое указывает, будет ли файл развертываться на удаленном компьютере отладки. Вы можете отключить развертывание полностью, перейдя в раздел Страницы свойств>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
диктует, какой удаленный компьютер используется для развертывания и отладки.
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"
}
]
Следующие шаги
- Сведения об отладке устройств ARM в Linux см. в записи блога Отладка встраиваемых устройств ARM в Visual Studio.