Удаленная отладка Linux в Visual Studio
Обновлено: 20.11.2024
Visual Studio может запускать и отлаживать приложения Python локально и удаленно на компьютере с Windows (см. Удаленная отладка). Он также может выполнять удаленную отладку в другой операционной системе, устройстве или реализации Python, отличной от CPython, с помощью библиотеки ptvsd.
При использовании ptvsd отлаживаемый код Python размещает сервер отладки, к которому может подключиться Visual Studio. Для этого хостинга требуется небольшая модификация вашего кода для импорта и включения сервера, а также может потребоваться настройка сети или брандмауэра на удаленном компьютере для разрешения TCP-соединений.
Настройка компьютера с Linux
Для выполнения этого пошагового руководства необходимы следующие элементы:
- Удаленный компьютер, работающий под управлением Python в операционной системе, такой как Mac OSX или Linux.
- В брандмауэре этого компьютера открыт порт 5678 (входящий), который используется по умолчанию для удаленной отладки.
Вы можете легко создать виртуальную машину Linux в Azure и получить к ней доступ с помощью удаленного рабочего стола из Windows. Ubuntu для ВМ удобен тем, что Python установлен по умолчанию; в противном случае см. список дополнительных мест для загрузки Python в разделе Установка интерпретатора Python по вашему выбору.
Подробнее о создании правила брандмауэра для виртуальной машины Azure см. в разделе Открытие портов на виртуальную машину в Azure с помощью портала Azure.
Подготовить скрипт к отладке
На удаленном компьютере создайте файл Python с именем guessing-game.py со следующим кодом:
Установите пакет ptvsd в свою среду с помощью pip3 install ptvsd .
Рекомендуется записать версию установленного ptvsd на случай, если она понадобится для устранения неполадок; список ptvsd также показывает доступные версии.
Включите удаленную отладку, добавив приведенный ниже код как можно раньше в файл guessing-game.py перед другим кодом. (Хотя это и не является строгим требованием, невозможно отлаживать любые фоновые потоки, созданные до вызова функции enable_attach.)
Сохраните файл и запустите python3 Guanging-game.py. Вызов enable_attach выполняется в фоновом режиме и ожидает входящих подключений, пока вы взаимодействуете с программой. При желании после enable_attach можно вызвать функцию wait_for_attach, чтобы заблокировать программу до тех пор, пока не подключится отладчик.
Помимо enable_attach и wait_for_attach, ptvsd также предоставляет вспомогательную функцию break_into_debugger, которая служит программной точкой останова, если отладчик подключен. Существует также функция is_attached, которая возвращает True, если отладчик подключен (обратите внимание, что нет необходимости проверять этот результат перед вызовом любых других функций ptvsd).
Удаленное подключение из инструментов Python
В этих шагах мы устанавливаем простую точку останова для остановки удаленного процесса.
Создайте копию удаленного файла на локальном компьютере и откройте ее в Visual Studio. Неважно, где находится файл, но его имя должно совпадать с именем скрипта на удаленном компьютере.
(Необязательно) Чтобы иметь IntelliSense для ptvsd на локальном компьютере, установите пакет ptvsd в среду Python.
Выберите Отладка > Присоединить к процессу.
В появившемся диалоговом окне «Присоединение к процессу» установите для параметра «Тип подключения» значение «Удаленный Python (ptvsd)». (В более ранних версиях Visual Studio эти команды называются Transport и удаленная отладка Python.)
Нажмите Enter, чтобы заполнить список доступных процессов ptvsd на этом компьютере:
Если вы случайно запустите другую программу на удаленном компьютере после заполнения этого списка, нажмите кнопку «Обновить».
Выберите процесс для отладки, а затем нажмите Прикрепить или дважды щелкните процесс.
Затем Visual Studio переключается в режим отладки, в то время как сценарий продолжает выполняться на удаленном компьютере, предоставляя все обычные возможности отладки. Например, установите точку останова на строке «если предположить», затем переключитесь на удаленный компьютер и введите другое предположение. После этого Visual Studio на вашем локальном компьютере остановится в этой точке останова, отобразит локальные переменные и т. д.:
Когда вы прекращаете отладку, Visual Studio отключается от программы, которая продолжает работать на удаленном компьютере. ptvsd также продолжает отслеживать подключение отладчиков, поэтому вы можете снова подключиться к процессу в любое время.
Устранение неполадок с подключением
Убедитесь, что вы выбрали удаленный Python (ptvsd) для типа подключения (удаленная отладка Python для транспорта с более ранними версиями).
Убедитесь, что секрет в целевом объекте соединения (или квалификаторе) точно соответствует секрету в удаленном коде.
Убедитесь, что IP-адрес в целевом объекте подключения (или квалификаторе) совпадает с IP-адресом удаленного компьютера.
Убедитесь, что вы открыли порт удаленной отладки на удаленном компьютере и указали суффикс порта в цели подключения, например :5678 .
- Если вам нужно использовать другой порт, вы можете указать его в вызове enable_attach, используя аргумент адреса, как в ptvsd.enable_attach(address = ('0.0.0.0', 8080)) . В этом случае откройте этот конкретный порт в брандмауэре.
Убедитесь, что версия ptvsd, установленная на удаленном компьютере и возвращенная списком pip3, совпадает с версией инструментов Python, которые вы используете в Visual Studio, в таблице ниже. При необходимости обновите ptvsd на удаленном компьютере.
Использование ptvsd 3.x
Следующая информация относится только к удаленной отладке с помощью ptvsd 3.x, которая содержит некоторые функции, удаленные в ptvsd 4.x.
В ptvsd 3.x функция enable_attach требовала, чтобы вы передавали «секрет» в качестве первого аргумента, ограничивающего доступ к запущенному сценарию. Вы вводите этот секрет при подключении удаленного отладчика. Хотя это и не рекомендуется, вы можете разрешить подключение любому, используйте enable_attach(secret=None) .
Целевой URL-адрес подключения: tcp:// @ :5678, где строка, переданная enable_attach в коде Python.
По умолчанию подключение к серверу удаленной отладки ptvsd 3.x защищено только секретом, а все данные передаются в виде обычного текста. Для более безопасного соединения ptvsd 3.x поддерживает SSL с использованием протокола tcsp, который вы настраиваете следующим образом:
На удаленном компьютере сгенерируйте отдельные самозаверяющие сертификаты и файлы ключей с помощью openssl:
При появлении запроса используйте имя хоста или IP-адрес (в зависимости от того, что вы используете для подключения) в качестве общего имени при запросе openssl.
(Дополнительные сведения см. в разделе «Самозаверяющие сертификаты» в документации модуля Python ssl. Обратите внимание, что команда в этих документах создает только один комбинированный файл.)
В коде измените вызов enable_attach, чтобы включить аргументы certfile и keyfile, используя имена файлов в качестве значений (эти аргументы имеют то же значение, что и для стандартной функции Python ssl.wrap_socket):
Вы также можете внести такие же изменения в файл кода на локальном компьютере, но, поскольку этот код на самом деле не запускается, в этом нет строгой необходимости.
Перезапустите программу Python на удаленном компьютере, подготовив ее к отладке.
Защитите канал, добавив сертификат в доверенный корневой ЦС на компьютере Windows с помощью Visual Studio:
- Скопируйте файл сертификата с удаленного компьютера на локальный.
- Откройте панель управления и выберите "Администрирование" > "Управление сертификатами компьютеров".
- В появившемся окне слева разверните узел "Доверенные корневые центры сертификации", щелкните правой кнопкой мыши "Сертификаты" и выберите "Все задачи" > "Импорт".
- Перейдите к файлу .cer, скопированному с удаленного компьютера, и выберите его, а затем нажмите в диалоговом окне, чтобы завершить импорт.
Повторите процесс подключения в Visual Studio, как описано ранее, теперь используя tcps:// в качестве протокола для цели подключения (или квалификатора).
Visual Studio сообщает о возможных проблемах с сертификатами при подключении через SSL. Вы можете проигнорировать предупреждения и продолжить, но хотя канал по-прежнему зашифрован от прослушивания, он может быть открыт для атак типа «человек посередине».
Если вы видите ниже предупреждение о том, что удаленный сертификат не является доверенным, это означает, что вы неправильно добавили сертификат в доверенный корневой ЦС. Проверьте эти шаги и повторите попытку.
Если вы видите, что имя удаленного сертификата не соответствует имени хоста ниже, это означает, что вы не использовали правильное имя хоста или IP-адрес в качестве общего имени при создании сертификата.
Visual Studio может запускать и отлаживать приложения Python локально и удаленно на компьютере с Windows (см. Удаленная отладка). Он также может выполнять удаленную отладку в другой операционной системе, устройстве или реализации Python, отличной от CPython, с помощью библиотеки отладки.
При использовании debugpy отлаживаемый код Python размещает сервер отладки, к которому может подключиться Visual Studio.Для этого хостинга требуется небольшая модификация вашего кода для импорта и включения сервера, а также может потребоваться настройка сети или брандмауэра на удаленном компьютере для разрешения TCP-соединений.
Для Visual Studio 2019 версии 16.4 и более ранних версий использовалась библиотека ptvsd. Библиотека отладки заменила ptvsd 4 в Visual Studio 2019 версии 16.5.
Настройка компьютера с Linux
Для выполнения этого пошагового руководства необходимы следующие элементы:
- Удаленный компьютер, работающий под управлением Python в операционной системе, такой как Mac OSX или Linux.
- В брандмауэре этого компьютера открыт порт 5678 (входящий), который используется по умолчанию для удаленной отладки.
Это пошаговое руководство основано на Visual Studio 2019 версии 16.6.
Вы можете легко создать виртуальную машину Linux в Azure и получить к ней доступ с помощью удаленного рабочего стола из Windows. Ubuntu для ВМ удобен тем, что Python установлен по умолчанию; в противном случае см. список дополнительных мест для загрузки Python в разделе Установка интерпретатора Python по вашему выбору.
Подробнее о создании правила брандмауэра для виртуальной машины Azure см. в разделе Открытие портов на виртуальную машину в Azure с помощью портала Azure.
Подготовить скрипт к отладке
На удаленном компьютере создайте файл Python с именем guessing-game.py со следующим кодом:
Установите пакет отладки в свою среду с помощью pip3 install debugpy .
Рекомендуется записать установленную версию debugpy на случай, если она понадобится для устранения неполадок; список отладки также показывает доступные версии.
Включите удаленную отладку, добавив приведенный ниже код как можно раньше в файл guessing-game.py перед другим кодом. (Хотя это и не является строгим требованием, невозможно отлаживать любые фоновые потоки, созданные до вызова функции прослушивания.)
Сохраните файл и запустите python3 Guanging-game.py. Вызов прослушивания выполняется в фоновом режиме и ожидает входящих подключений, пока вы взаимодействуете с программой. При желании после прослушивания можно вызвать функцию wait_for_client, чтобы заблокировать программу до тех пор, пока не подключится отладчик.
В дополнение к listen и wait_for_client, debugpy также предоставляет точку останова вспомогательной функции, которая служит программной точкой останова, если отладчик подключен. Существует также функция is_client_connected, которая возвращает значение True, если отладчик подключен (обратите внимание, что нет необходимости проверять этот результат перед вызовом любых других функций отладки).
Удаленное подключение из инструментов Python
В этих шагах мы устанавливаем простую точку останова для остановки удаленного процесса.
Создайте копию удаленного файла на локальном компьютере и откройте ее в Visual Studio. Неважно, где находится файл, но его имя должно совпадать с именем скрипта на удаленном компьютере.
(Необязательно) Чтобы использовать IntelliSense для отладки на локальном компьютере, установите пакет отладки в среду Python.
Выберите Отладка > Присоединить к процессу.
В появившемся диалоговом окне «Присоединение к процессу» установите для параметра «Тип подключения» значение «Удаленный Python (отладка)».
Нажмите Enter, чтобы заполнить список доступных процессов отладки на этом компьютере:
Если вы случайно запустите другую программу на удаленном компьютере после заполнения этого списка, нажмите кнопку «Обновить».
Выберите процесс для отладки, а затем нажмите Прикрепить или дважды щелкните процесс.
Затем Visual Studio переключается в режим отладки, в то время как сценарий продолжает выполняться на удаленном компьютере, предоставляя все обычные возможности отладки. Например, установите точку останова на строке «если предположить», затем переключитесь на удаленный компьютер и введите другое предположение. После этого Visual Studio на вашем локальном компьютере остановится в этой точке останова, отобразит локальные переменные и т. д.:
Когда вы прекращаете отладку, Visual Studio отключается от программы, которая продолжает работать на удаленном компьютере. debugpy также продолжает ожидать подключения отладчиков, так что вы можете снова подключиться к процессу в любое время.
Устранение неполадок с подключением
Убедитесь, что вы выбрали удаленный Python (debugpy) в качестве типа подключения
Убедитесь, что секрет в целевом соединении точно совпадает с секретом в удаленном коде.
Убедитесь, что IP-адрес в целевом объекте подключения совпадает с IP-адресом удаленного компьютера.
Убедитесь, что вы открыли порт удаленной отладки на удаленном компьютере и указали суффикс порта в цели подключения, например :5678 .
- Если вам нужно использовать другой порт, вы можете указать его в listen , как в debugpy.listen((host, port)) . В этом случае откройте этот конкретный порт в брандмауэре.
Убедитесь, что версия debugpy, установленная на удаленном компьютере и возвращенная списком pip3, совпадает с версией инструментов Python, которые вы используете в Visual Studio, в таблице ниже. При необходимости обновите debugpy на удаленном компьютере.
Visual Studio 2019 версии 16.0–16.4 использовала ptvsd, а не debugpy. Процесс в этом пошаговом руководстве для этих версий аналогичен, но имена функций различаются. Visual Studio 2019 версии 16.5 использует отладку, но имена функций были такими же, как в ptvsd. Вместо listen вы должны использовать enable_attach. Вместо wait_for_client вы должны использовать wait_for_attach. Вместо точки останова вы должны использовать break_into_debugger .
Использование ptvsd 3.x для отладки старых версий
Visual Studio 2017 версии 15.8 и более поздних версий использует отладчик на основе ptvsd версии 4.1+. Visual Studio 2019 версии 16.5 и более поздних версий использует отладчик на основе debugpy. Эти версии отладчика совместимы с Python 2.7 и Python 3.5+. Если вы используете Python 2.6, 3.1–3.4 или IronPython, Visual Studio показывает ошибку «Отладчик не поддерживает эту среду Python». Следующая информация относится только к удаленной отладке с помощью ptvsd 3.x.
В ptvsd 3.x функция enable_attach требовала, чтобы вы передавали «секрет» в качестве первого аргумента, ограничивающего доступ к запущенному сценарию. Вы вводите этот секрет при подключении удаленного отладчика. Хотя это и не рекомендуется, вы можете разрешить подключение любому, используйте enable_attach(secret=None) .
Целевой URL-адрес подключения: tcp:// @ :5678, где строка, переданная enable_attach в коде Python.
По умолчанию подключение к серверу удаленной отладки ptvsd 3.x защищено только секретом, а все данные передаются в виде обычного текста. Для более безопасного соединения ptvsd 3.x поддерживает SSL с использованием протокола tcsp, который вы настраиваете следующим образом:
На удаленном компьютере сгенерируйте отдельные самозаверяющие сертификаты и файлы ключей с помощью openssl:
При появлении запроса используйте имя хоста или IP-адрес (в зависимости от того, что вы используете для подключения) в качестве общего имени при запросе openssl.
(Дополнительные сведения см. в разделе «Самозаверяющие сертификаты» в документации модуля Python ssl. Обратите внимание, что команда в этих документах создает только один комбинированный файл.)
В коде измените вызов enable_attach, чтобы включить аргументы certfile и keyfile, используя имена файлов в качестве значений (эти аргументы имеют то же значение, что и для стандартной функции Python ssl.wrap_socket):
Вы также можете внести такие же изменения в файл кода на локальном компьютере, но, поскольку этот код на самом деле не запускается, в этом нет строгой необходимости.
Перезапустите программу Python на удаленном компьютере, подготовив ее к отладке.
Защитите канал, добавив сертификат в доверенный корневой ЦС на компьютере Windows с помощью Visual Studio:
- Скопируйте файл сертификата с удаленного компьютера на локальный.
- Откройте панель управления и выберите "Администрирование" > "Управление сертификатами компьютеров".
- В появившемся окне слева разверните узел "Доверенные корневые центры сертификации", щелкните правой кнопкой мыши "Сертификаты" и выберите "Все задачи" > "Импорт".
- Перейдите к файлу .cer, скопированному с удаленного компьютера, и выберите его, а затем нажмите в диалоговом окне, чтобы завершить импорт.
Повторите процесс подключения в Visual Studio, как описано ранее, теперь используя tcps:// в качестве протокола для цели подключения (или квалификатора).
Visual Studio сообщает о возможных проблемах с сертификатами при подключении через SSL. Вы можете проигнорировать предупреждения и продолжить, но хотя канал по-прежнему зашифрован от прослушивания, он может быть открыт для атак типа «человек посередине».
Если вы видите ниже предупреждение о том, что удаленный сертификат не является доверенным, это означает, что вы неправильно добавили сертификат в доверенный корневой ЦС. Проверьте эти шаги и повторите попытку.
Если вы видите, что имя удаленного сертификата не соответствует имени хоста ниже, это означает, что вы не использовали правильное имя хоста или IP-адрес в качестве общего имени при создании сертификата.
Поддержка Linux доступна в Visual Studio 2017 и более поздних версиях.
Вы можете настроить проект Linux для удаленного компьютера или подсистемы Windows для Linux (WSL). Как для удаленных компьютеров, так и для WSL необходимо настроить удаленное подключение в Visual Studio 2017.
Вы можете настроить проект Linux для удаленного компьютера или подсистемы Windows для Linux (WSL). Для удаленного компьютера необходимо настроить удаленное подключение в Visual Studio. Чтобы подключиться к WSL, перейдите к разделу «Подключение к WSL».
При использовании удаленного подключения Visual Studio создает проекты C++ Linux на удаленном компьютере. Неважно, физическая это машина, виртуальная машина в облаке или WSL. Чтобы построить проект, Visual Studio копирует исходный код на ваш удаленный компьютер Linux. Затем код компилируется на основе настроек Visual Studio.
Начиная с Visual Studio 2019 версии 16.5, Visual Studio поддерживает безопасные, соответствующие Федеральному стандарту обработки информации (FIPS) 140-2 криптографические подключения к системам Linux для удаленной разработки. Чтобы использовать соединение, совместимое с FIPS, выполните действия, описанные в разделе Настройка безопасной удаленной разработки Linux, совместимой с FIPS.
Настройте SSH-сервер в удаленной системе
Если ssh еще не настроен и не запущен в вашей системе Linux, выполните следующие действия, чтобы установить его. В примерах в этой статье используется Ubuntu 18.04 LTS с сервером OpenSSH версии 7.6. Однако инструкции должны быть одинаковыми для любого дистрибутива, использующего относительно новую версию OpenSSH.
В системе Linux установите и запустите сервер OpenSSH:
Если вы хотите, чтобы сервер ssh запускался автоматически при загрузке системы, включите его с помощью systemctl:
Настройка удаленного подключения
В Visual Studio выберите «Инструменты» > «Параметры» в строке меню, чтобы открыть диалоговое окно «Параметры». Затем выберите Cross Platform > Connection Manager, чтобы открыть диалоговое окно Connection Manager.
Если вы еще не настроили подключение в Visual Studio, при первом создании проекта Visual Studio откроет для вас диалоговое окно диспетчера подключений.
В диалоговом окне "Диспетчер подключений" нажмите кнопку "Добавить", чтобы добавить новое подключение.
В любом случае отображается окно «Подключиться к удаленной системе».
Введите следующую информацию:
Запись | Описание |
---|---|
Имя хоста | Имя или IP-адрес вашего целевого устройства |
Порт | Порт, на котором работает служба SSH, обычно 22 |
Имя пользователя | Пользователь для аутентификации |
Тип аутентификации | Поддерживаются как пароль, так и закрытый ключ< /td> |
Пароль | Пароль для введенного имени пользователя |
Файл закрытого ключа | Файл закрытого ключа, созданный для соединения ssh |
Парольная фраза | Парольная фраза, используемая с выбранным выше закрытым ключом |