Visual studio 2019 отладка 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 отладчик запускает GDB в удаленной системе. Это лучший вариант, если локальная версия GDB несовместима с версией, установленной на целевом компьютере. Это единственный режим, который поддерживает окно консоли Linux.
Если не удается попасть в точки останова в режиме отладки gdbserver, попробуйте gdb режим. gdb сначала следует установить в удаленной целевой системе.
Выберите удаленную целевую систему, используя стандартную панель инструментов Отладка в Visual Studio.
Если удаленная целевая система доступна, вы определите ее по имени или IP-адресу.
Если вы еще не подключились к удаленной целевой системе, вы увидите инструкции по использованию диспетчера подключений Linux для выполнения подключения.
Задайте точку останова, щелкнув в левом поле код, который будет выполняться.
В строке кода, где вы задали точку останова, появится красная точка.
Нажмите клавишу F5 (или Отладка > Начать отладку), чтобы начать отладку.
При запуске отладки приложение компилируется на удаленном целевом компьютере и после этого запускается. Ошибки компиляции будут показаны в окне Список ошибок.
Если ошибок нет, приложение запустится, и по достижении точки останова отладчик остановится.
Теперь можно работать с приложением в его текущем состоянии, просматривать переменные и пошагово выполнять код, нажимая командные клавиши, такие как F10 или F11.
Если для взаимодействия с приложением вы хотите использовать консоль 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 и более поздних версий.
Отладка с использованием присоединения к процессу
AttachOptionsForConnection имеет значительную часть атрибутов, которые могут потребоваться. Приведенный выше пример показывает, как указать расположение для поиска дополнительных библиотек .so. Дочерний элемент ServerOptions позволяет вместо этого подключиться к удаленному процессу с использованием gdbserver. Для этого необходимо указать локальный клиент gdb (экземпляр, предоставляемый с Visual Studio 2017, показан выше) и локальную копию двоичного файла с символами. Элемент SetupCommands позволяет передавать команды непосредственно в gdb. Все эти параметры доступны в схеме LaunchOptions.xsd на сайте GitHub.
Указание разных компьютеров для сборки и отладки в проектах Linux на основе MSBuild
Вы можете отделить удаленный компьютер сборки от удаленного компьютера отладки для любых проектов MSBuild и CMake, которые будут использоваться с удаленным компьютером Linux. Например, при работе с Интернетом вещей теперь можно выполнить компиляцию на платформе x64 и развернуть приложение на устройстве ARM.
По умолчанию удаленный компьютер отладки совпадает с удаленным компьютером сборки (настраивается в разделе Свойства конфигурации > Общие > Удаленный компьютер сборки). Чтобы назначить для отладки другой удаленный компьютер, щелкните правой кнопкой мыши проект в обозревателе решений и перейдите к разделу Свойства конфигурации > Общие > Удаленный компьютер отладки.
В раскрывающемся меню Удаленный компьютер отладки перечислены все созданные удаленные подключения. Чтобы добавить новое удаленное подключение, откройте раздел Средства > Параметры > Кроссплатформенные > Диспетчер подключений или выполните поиск по строке "диспетчер подключений" на панели быстрого запуска. Кроме того, новый удаленный каталог для развертывания можно указать на страницах свойств проекта (Свойства конфигурации > Общие > Каталог удаленного развертывания).
По умолчанию на удаленном компьютере отладки будут развернуты только файлы, необходимые для процесса отладки. Вы можете использовать обозреватель решений, чтобы выбрать исходный файлы для развертывания на удаленном компьютере отладки. Щелкнув исходный файл, вы сможете просмотреть свойства этого файла непосредственно под Обозревателем решений.
В некоторых случаях может потребоваться более точный контроль над развертыванием проекта. Например, если некоторые файлы для развертывания расположены за пределами решения или вы хотите настроить несколько удаленных каталогов для разных исходных файлов или каталогов. Для таких случаев добавьте следующий блок кода один или несколько раз в файл с расширением .vcxproj, заменив в них строку example.cpp именами реальных файлов:
Проекты CMake
Для проектов CMake, которые будут использоваться с удаленным компьютером Linux, можно указать новый удаленный компьютер отладки в файле launch.vs.json. По умолчанию значение remoteMachineName синхронизируется со свойством remoteMachineName из файла CMakeSettings.json, который обозначает удаленный компьютер сборки. Теперь эти свойства могут не совпадать, а значение remoteMachineName в файле launch.vs.json обозначает удаленный компьютер, который используется для развертывания и отладки.
IntelliSense предложит полный список всех установленных удаленных подключений. Чтобы добавить новое удаленное подключение, откройте раздел Средства > Параметры > Кроссплатформенные > Диспетчер подключений или выполните поиск по строке "диспетчер подключений" на панели быстрого запуска.
Не ограничивайтесь одним методом. У вас может быть профиль запуска для Docker и WSL в одном проекте, и вы можете выбрать тот, который подходит для конкретного типа запуска. После развертывания приложения всегда можно подключить удаленный отладчик в случае возникновения проблемы.
Начиная с Visual Studio 2019 версии 16.11 Preview 3, цель отладки WSL 2 была переименована в WSL.
Предварительные требования
Чтобы проверить наличие компонента WSL, выберите Сервис > Получить средства и компоненты. В Visual Studio Installer убедитесь, что компонент установлен, выбрав вкладку Отдельные компоненты и введя WSL в поле поиска.
Установленный дистрибутив по вашему усмотрению.
Запуск отладки с WSL
Выберите этот профиль, чтобы добавить его в файл launchSettings.json.
В следующем примере показаны некоторые ключевые атрибуты в файле.
Начиная с Visual Studio 2022 Preview 3, имя команды в профиле запуска изменилось с WSL2 на WSL.
Запустите отладку привычным способом, и ваше приложение будет работать в вашем распространении WSL по умолчанию.
Простой способ убедиться, что вы используете Linux, — проверить значение Environment.OSVersion .
Выбор конкретного дистрибутива
По умолчанию профиль запуска WSL 2 использует стандартный дистрибутив, заданный в файле wsl.exe. Если нужно запустить профиль для другого конкретного дистрибутива, независимо от используемого по умолчанию, можно изменить профиль запуска. Например, если вы отлаживаете веб-приложение и хотите проверить его в Ubuntu 20.04, профиль запуска будет выглядеть следующим образом:
Ориентация на несколько дистрибутивов
Если вы создаете приложение, предназначенное выполняться в нескольких дистрибутивах, и хотите быстро проверить работу в каждом из них, следующим шагом будет создание нескольких профилей запуска. Например, если необходимо проверить консольное приложение в Debian, Ubuntu 18.04 и Ubuntu 20.04, можно использовать следующие профили запуска:
Эти профили запуска обеспечивают легкое и удобное переключение между целевыми дистрибутивами, при этом не нужно выходить из Visual Studio.
Параметры WSL в профиле запуска
В следующей таблице приведены параметры, которые поддерживаются в профиле запуска.
Давайте начистоту, мало кто использует отладчик GDB на Linux в консольном варианте. Но что, если добавить в него красивый интерфейс? Под катом вы найдёте пошаговую инструкцию отладки кода С/С++ на Linux в Visual Studio Code.
Передаю слово автору.
Относительно недавно я переехал на Linux. Разрабатывать на Windows, конечно, удобнее и приятнее, но и здесь я нашел эффективный способ легко и быстро отлаживать код на С/С++, не прибегая к таким методам как «printf-стайл отладки» и так далее.
Итак приступим. Писать в sublime (или gedit/kate/emacs ), а запускать в терминале — так себе решение, ошибку при работе с динамическим распределением памяти вряд ли найдёшь с первого раза. А если проект трудоёмкий? У меня есть более удобное решение. Да и ещё поддержка Git в редакторе, одни плюсы.
Сегодня мы поговорим про Visual Studio Code.
Установка
Ubuntu/Debian
- Качаем версию пакета VS Code с расширением .deb
- Переходим в папку, куда скачался пакет (cd
/Загрузки или cd
Расширения для С/С++
Чтобы VS Code полностью сопровождал нас при работе с файлами С/С++, нужно установить расширение «cpptools». Также полезным будет поставить один из наборов сниппетов.
Настоятельно рекомендую включить автосохранение редактируемых файлов, это поможет нам в дальнейшем.
Идём дальше. Открываем любую папку (новую или нет, неважно).
У меня в этой папке уже есть пара файлов для работы с C/C++. Вы можете скопировать одну из своих наработок сюда или создать новый файл.
Осталось всего ничего. Настроить компиляцию в одну клавишу и научиться отлаживать без printf .
Шаг 1. Открываем файл .c/.cpp, который (обязательно) лежит в вашей папке.
Шаг 2. Нажимаем Ctrl+Shift+B. VS Code вам мягко намекнет, что он не знает как собирать ваш проект.
Шаг 3. Поэтому дальше настраиваем задачу сборки: выбираем «Настроить задачу сборки» -> «Others».
Шаг 4. Прописываем конфигурацию в соответствии с образцом. По сути мы пишем скрипт для консоли, так что всем кто имел дело с ней будет понятно дальнейшее. Прошу заметить, что для сборки исходников в системе должен стоять сам компилятор (gcc или другой, отличаться будет только значение поля command ). Поэтому для компиляции .cpp, понадобится в поле command указать g++ или c++ , а для .c gcc .
Шаг 5. В args прописываем аргументы, которые будут переданы на вход вашему компилятору. Напоминаю, что порядок должен быть примерно таким: -g, <имя файла> .
Внимание: Если в вашей программе используется несколько файлов с исходным кодом, то укажите их в разных аргументах через запятую. Также обязательным является ключ -g (а лучше даже -g3 ). Иначе вы не сможете отладить программу.
Если в проекте для сборки вы используете makefile , то в поле command введите make , а в качестве аргумента передайте директиву для сборки.
Шаг 6. Далее возвращаемся обратно к нашему исходнику. И нажимаем F5 и выбираем C++.
Шаг 7. Осталось только написать путь к файлу программы. По умолчанию это $/a.out , но я в своем файле сборки указал флаг -o и переименовал файл скомпилированной программы, поэтому у меня путь до программы: $/main .
Шаг 8. Всё, больше нам не нужно ничего для начала использования всех благ VS Code. Переходим к основному проекту.
Отладка
Для начала скомпилируем программу (нет, нет, убери терминал, теперь это делается по нажатию Ctrl+Shift+B).
Как вы видите в проводнике появился main , значит все в порядке и сборка прошла без ошибок. У меня не слишком большая программа, но выполняется она моментально. Одним словом, провал чистой воды, потому что отладка идет в отдельном терминале, который закрывается после того, как программа дошла в main() до "return 0;" .
Пришло время для брейкпоинтов. Выберем строчку с "return 0;" и нажимаем F9.
Строчка, помеченная красной точкой слева — место, где остановится программа, при выполнении.
Далее нажимаем F5.
Как я и сказал, программа остановила выполнение. Обратите внимание на окно с локальными переменными.
Удобненько. Также при остановке можно наводить мышкой на переменные и структуры в коде и смотреть их значения.
Также, если на каком-то этапе выполнения вам нужно посмотреть пошаговое выполнение той или иной операции, например в цикле, то поставьте брейкпоинт перед ней и нажмите F10 для выполнения текущей строчки без захода в подпрограмму и F11 с заходом.
Также есть случаи, когда считать выражение очень муторно вручную, но для отладки вам нужно знать, например, значение суммы трех элементов массива, или значение большого логического выражения. Для этого существуют контрольные значения. Все это и многое другое могут показать вам Контрольные значения (или «watch»).
- Для каждой папки вам нужно отдельно настроить файлы сборки и путь к программе.
- VS Code не решит ваших проблем, но поможет быстрее с ними разобраться. Причем в разы.
- После каждого изменения программы, ее нужно компилировать заново, нажимая Ctrl+Shift+B.
Об авторе
Develop C++ programs on Linux using Visual studio 2019
Каталог статей
Структура программы
тип проекта
Будь то динамическая библиотека, статическая библиотека или основная программа, выберите этот тип проекта.
Динамическая библиотека
Статическая библиотека
Основная программа
Динамическая библиотека
«Общая» конфигурация
Расширение целевого файла
".out" заменяется на ".so"
Создать корневой каталог удаленно
- Тип конфигурации
"Приложение (.out)" заменено на "Динамическая библиотека (.so)"
Статическая библиотека
«Общая» конфигурация
Расширение целевого файла
".out" заменяется на ".a"
Создать корневой каталог удаленно
- Тип конфигурации
"Приложение (.out)" заменено на "Статическая библиотека (.a)"
Основная программа
«Общая» конфигурация
Чтобы поместить все выходные файлы проекта в один каталог, удобно ссылаться друг на друга.
Расширение целевого файла
".out" изменен на "", чтобы не создавать суффикс файла, обычные исполняемые программы Linux не имеют имени расширения и могут быть изменены или нет.
Создать корневой каталог удаленно
» И «/ root» эквивалентны, но каталог поиска динамической библиотеки не поддерживает
path во время выполнения. Добавление «$ (SolutionName)» предназначено для различения проектов с одинаковыми именами в разных решениях.
- Создавать каталог проекта удаленно
Путь к файлу заголовка
Дополнительный каталог include : Добавьте ". / . ;" перед "$ (StlIncludeDirectories);% (AdditionalIncludeDirectories)", это путь на удаленном хосте Linux, что эквивалентно указанию параметра "-I [path]" при компиляции gcc; как правило, сначала Скопируйте необходимые файлы заголовков из Linux в Windows, а затем установите «Свойства конфигурации» -> «VC + + Directory» -> «Включить каталог», чтобы информация в подсказках была более удобной при написании программ для Linux.
Путь к библиотеке
Каталог дополнительных библиотек : Добавьте «$ (RemoteRootDir) / bin / $ (Platform) / $ (Configuration);» перед «% (AdditionalLibraryDirectories)», это путь на удаленном хосте Linux, что эквивалентно указанию «-L [путь при компиляции gcc ] "параметр, используемый для указания каталога, который ссылается на динамическую библиотеку и статическую библиотеку;
другие опции : Добавьте «-Wl, -rpath = $ (RemoteRootDir) / bin / $ (Platform) / $ (Configuration)», чтобы указать путь для поиска динамических библиотек во время работы программы.
Зависимая библиотека
Зависимости библиотеки : Добавить "d_lib; s_lib", что эквивалентно настройке gcc параметра "-l [имя библиотеки]", который используется для указания динамической библиотеки и имени статической библиотеки, требуемого во время связывания. Если зависимый файл библиотеки не может быть найден, во время связывания произойдет ошибка , Отображение «неразрешенного символа».
отладка
Программа: «$ (RemoteTargetPath)» изменяется на «$ (RemoteRootDir) / bin / $ (Platform) / $ (Configuration) / $ (TargetName) $ (TargetExt)», потому что Изменение локального выходного каталога приводит к соответствующему изменению удаленного выходного каталога, и изменения здесь согласованы.
Рабочий каталог: «$ (RemoteOutDir)» изменяется на «$ (RemoteRootDir) / bin / $ (Platform) / $ (Configuration)», это путь на удаленном хосте Linux, если параметр неверен, указанная динамическая переменная не будет найдена Библиотека, отладчик не запускается.
Другие команды отладчика: "" Изменить на "set solib-search-path $ (SolutionDir) bin / $ (Platform) / $ (Configuration)", это локальный путь, символы отладки загружаются локально, в противном случае динамическая библиотека отлаживается Когда GDB выведет файл отладочных символов, который не найден.
Читайте также: