Zdalne debugowanie kodu języka Python w systemie Linux w programie Visual Studio
W tym artykule dowiesz się, jak skonfigurować instalację programu Visual Studio w celu obsługi debugowania kodu języka Python na zdalnych komputerach z systemem Linux. Ten przewodnik jest oparty na programie Visual Studio 2019 w wersji 16.6.
Program Visual Studio może uruchamiać i debugować aplikacje języka Python lokalnie i zdalnie na komputerze z systemem Windows. Program Visual Studio obsługuje również zdalne debugowanie w innym systemie operacyjnym, urządzeniu lub implementacji języka Python innym niż CPython przy użyciu biblioteki debugpy .
Program Visual Studio 2019 w wersji 16.4 lub starszej używa biblioteki ptvsd. W programie Visual Studio 2019 w wersji 16.5 lub nowszej biblioteka debugpy zastępuje ptvsd. Podczas korzystania z debugpy, debugowany kod Pythona hostuje serwer debugowania, do którego może dołączać program Visual Studio. Ten hosting wymaga niewielkiej modyfikacji kodu w celu zaimportowania i włączenia serwera. Może być również konieczne dostosowanie konfiguracji sieci lub zapory na komputerze zdalnym w celu zezwolenia na połączenia TCP.
Warunki wstępne
Program Visual Studio zainstalowany z obsługą obciążeń języka Python. Aby uzyskać więcej informacji, zobacz Instalowanie obsługi języka Python w programie Visual Studio.
Komputer zdalny z językiem Python w systemie operacyjnym, na przykład macOS lub Linux.
Port 5678 (przychodzący) jest otwarty w zaporze ogniowej komputera zdalnego, co jest domyślnym ustawieniem do debugowania zdalnego.
Konfigurowanie komputera z systemem Linux
Możesz łatwo utworzyć maszynę wirtualną z systemem Linux na platformie Azure i uzyskać do niej dostęp przy użyciu pulpitu zdalnego z systemu Windows. System Ubuntu dla maszyny wirtualnej jest wygodny, ponieważ język Python jest instalowany domyślnie. Jeśli masz inną konfigurację, zobacz Instalowanie interpreterów języka Python dla innych lokalizacji pobierania języka Python.
Konfigurowanie zapory
Aby obsługiwać zdalne debugowanie, port przychodzący 5678 musi być otwarty w zaporze komputera zdalnego.
Aby uzyskać szczegółowe informacje na temat tworzenia reguły zapory dla maszyny wirtualnej platformy Azure, zobacz następujące artykuły:
- Filtruj ruch sieciowy za pomocą sieciowej grupy zabezpieczeń przy użyciu portalu Azure
- Kierowanie ruchu sieciowego za pomocą tabeli tras przy użyciu witryny Azure Portal
- Wdrażanie i konfigurowanie usługi Azure Firewall przy użyciu witryny Azure Portal
Przygotowywanie skryptu do debugowania
Wykonaj następujące kroki, aby przygotować skrypt do debugowania kodu w języku Python w systemie Linux.
Na komputerze zdalnym utwórz plik w języku Python o nazwie guessing-game.py przy użyciu następującego kodu:
import random guesses_made = 0 name = input('Hello! What is your name?\n') number = random.randint(1, 20) print('Well, {0}, I am thinking of a number between 1 and 20.'.format(name)) while guesses_made < 6: guess = int(input('Take a guess: ')) guesses_made += 1 if guess < number: print('Your guess is too low.') if guess > number: print('Your guess is too high.') if guess == number: break if guess == number: print('Good job, {0}! You guessed my number in {1} guesses!'.format(name, guesses_made)) else: print('Nope. The number I was thinking of was {0}'.format(number))
Zainstaluj pakiet
debugpy
w środowisku przy użyciu poleceniapip3 install debugpy
.Notatka
Dobrym pomysłem jest zarejestrowanie wersji debugpy zainstalowanej w przypadku, gdy będzie potrzebny do rozwiązywania problemów. Lista debugpy również zawiera dostępne wersje.
Włącz debugowanie zdalne, dodając następujący kod w górnej części pliku guessing-game.py przed innym kodem. (Chociaż nie jest to ścisłe wymaganie, nie można debugować żadnych wątków w tle utworzonych przed wywołaniem funkcji
listen
).import debugpy debugpy.listen(('0.0.0.0', 5678))
Zapisz plik i uruchom program:
python3 guessing-game.py
Wywołanie funkcji
listen
działa w tle i czeka na połączenia przychodzące podczas interakcji z programem. W razie potrzeby można wywołać funkcjęwait_for_client
po wywołaniu funkcjilisten
, aby zablokować program do momentu dołączenia debugera.
Napiwek
Oprócz funkcji listen
i wait_for_client
debugpy udostępnia również funkcję pomocnika breakpoint
. Ta funkcja służy jako programowy punkt przerwania, jeśli debuger jest dołączony. Inna funkcja, is_client_connected1
, zwraca True
, jeśli debuger jest dołączony. Nie musisz sprawdzać tego wyniku przed wywołaniem innych funkcji debugpy
.
Dołączanie zdalnie z narzędzi języka Python
W poniższych krokach pokazano, jak ustawić punkt przerwania, aby zatrzymać proces zdalny.
Utwórz kopię pliku zdalnego na komputerze lokalnym i otwórz go w programie Visual Studio. Nie ma znaczenia, gdzie znajduje się plik, ale jego nazwa powinna być zgodna z nazwą skryptu na komputerze zdalnym.
(Opcjonalnie) Aby mieć funkcję IntelliSense dla debugpy na komputerze lokalnym, zainstaluj pakiet debugpy w środowisku języka Python.
Wybierz pozycję Debuguj>Dołącz do procesu.
W oknie dialogowym Dołącz do procesu ustaw typ połączenia na Python remote (debugpy).
W polu celu połączenia wprowadź polecenie
tcp://<ip_address>:5678
.-
tcp://
określa typ połączenia jako protokół TCP (Transmission Control Protocol). -
<ip_address>
jest adresem IP komputera zdalnego, który może być jawnym adresem lub nazwą taką jak myvm.cloudapp.net. -
:5678
to numer portu debugowania zdalnego.
-
Wybierz pozycję Wprowadź, aby wypełnić listę dostępnych procesów debugowania na tym komputerze:
Jeśli zdarzy ci się uruchomić inny program na komputerze zdalnym po wypełnieniu tej listy, wybierz przycisk Odśwież.
Wybierz proces do debugowania i wybierz Dołączlub kliknij dwukrotnie proces.
Program Visual Studio przełącza się w tryb debugowania, podczas gdy skrypt nadal działa na komputerze zdalnym, zapewniając wszystkie typowe debugowanie możliwości.
Możesz ustawić punkt przerwania w wierszu
if guess < number:
, a następnie przełączyć się na komputer zdalny i wprowadzić kolejne odgadnięcie. Program Visual Studio na komputerze lokalnym zatrzymuje się w punkcie przerwania, wyświetla zmienne lokalne itd.:Po zatrzymaniu debugowania program Visual Studio odłącza się od programu. Program nadal działa na komputerze zdalnym. debugpy kontynuuje również nasłuchiwanie podczas dołączania debugerów, dzięki czemu można ponownie dołączyć do procesu w dowolnym momencie.
Rozwiązywanie problemów z połączeniem
Zapoznaj się z poniższymi punktami, aby rozwiązać problemy z połączeniem.
Upewnij się, że wybrano zdalny Python (debugpy) dla Typ połączenia.
Upewnij się, że tajny klucz w docelowym połączeniu dokładnie pasuje do tajnego klucza w kodzie zdalnym.
Upewnij się, że adres IP w celu połączenia jest zgodny z adresem komputera zdalnego.
Sprawdź, czy port zdalnego debugowania na komputerze zdalnym jest otwarty, a obiekt docelowy połączenia zawiera sufiks portu, taki jak
:5678
.Aby użyć innego portu, określ numer portu w wywołaniu funkcji
listen
, jak wdebugpy.listen((host, port))
. W takim przypadku należy otworzyć określony port w zaporze.Upewnij się, że wersja debugpy zainstalowana na komputerze zdalnym (zwrócona przez polecenie
pip3 list
) jest zgodna z wersją narzędzi Visual Studio Python Tools (PTVS).W poniższej tabeli wymieniono prawidłowe pary wersji. W razie potrzeby zaktualizuj wersję debugpy na komputerze zdalnym.
Visual Studio Narzędzia języka Python debugpy 2019 16.6 1.0.0b5 1.0.0b5 2019 16.5 1.0.0b1 1.0.0b1
Notatka
Program Visual Studio 2019 w wersji 16.0-16.4 wykorzystał pliki ptvsd, a nie debugpy. Proces w tym przewodniku dla tych wersji jest podobny, ale nazwy funkcji są różne. Program Visual Studio 2019 w wersji 16.5 używa debugpy, ale nazwy funkcji były takie same jak w pliku ptvsd. Zamiast listen
należy użyć enable_attach
. Zamiast wait_for_client
należy użyć wait_for_attach
. Zamiast breakpoint
należy użyć break_into_debugger
.
Użyj ptvsd 3.x do debugowania starszych wersji
Starszy debuger ptvsd 3.x jest domyślny w programie Visual Studio 2017 w wersji 15.7 lub starszej.
W zależności od konfiguracji programu Visual Studio może być konieczne użycie pliku ptvsd 3.x do zdalnego debugowania:
- Program Visual Studio 2017 w wersji 15.7 lub starszej z językiem Python 2.6, od 3.1 do 3.4 lub IronPython
- Program Visual Studio 2019 w wersji 16.5 lub nowszej z językiem Python 2.6, od 3.1 do 3.4 lub IronPython
- Wczesne wersje 4.x
Jeśli konfiguracja implementuje starszy scenariusz wersji, program Visual Studio wyświetla błąd, Debuger nie obsługuje tego środowiska języka Python.
Konfigurowanie zdalnego debugowania
Aby przygotować się do zdalnego debugowania z ptvsd 3.x, wykonaj następujące kroki:
Skonfiguruj swój sekret, który służy do ograniczania dostępu do skryptu działającego.
W ptvsd 3.x funkcja
enable_attach
wymaga przekazania "tajnego" jako pierwszego argumentu.- Po dołączeniu zdalnego debugera wprowadź sekret za pomocą polecenia
enable_attach(secret="<secret>")
.
Mimo że można zezwolić wszystkim na nawiązywanie połączenia przy użyciu polecenia
enable_attach(secret=None)
, ta opcja nie jest zalecana.- Po dołączeniu zdalnego debugera wprowadź sekret za pomocą polecenia
Utwórz docelowy adres URL połączenia w formularzu
tcp://<secret>@<ip_address>:5678
.-
tcp://
określa typ połączenia jako TCP. -
<secret>
to ciąg przekazywany z funkcjąenable_attach
w kodzie języka Python. -
<ip_address>
jest adresem IP komputera zdalnego, który może być jawnym adresem lub nazwą taką jak myvm.cloudapp.net. -
:5678
to numer portu debugowania zdalnego.
-
Bezpieczne połączenie przy użyciu protokołu TCPS
Domyślnie połączenie z zdalnym serwerem debugowania ptvsd 3.x jest zabezpieczone wyłącznie przez hasło, a wszystkie dane są przesyłane w postaci zwykłego tekstu. W przypadku bezpieczniejszego połączenia ptvsd 3.x obsługuje protokół SSL przy użyciu bezpiecznej formy protokołu TCP lub TCPS.
Wykonaj następujące kroki, aby skonfigurować plik ptvsd 3.x do pracy z protokołem TCPS:
Na komputerze zdalnym użyj polecenia
openssl
, aby wygenerować oddzielne pliki dla klucza i certyfikatu z podpisem własnym:openssl req -new -x509 -days 365 -nodes -out cert.cer -keyout cert.key
- W wierszu polecenia
openssl
wprowadź nazwę hosta lub adres IP używany do łączenia dla Nazwa Wspólna.
Aby uzyskać więcej informacji, zobacz certyfikaty z podpisem własnym w dokumentacji modułu
ssl
języka Python. Pamiętaj, że polecenie opisane w dokumentacji języka Python generuje tylko jeden połączony plik.- W wierszu polecenia
W kodzie zmodyfikuj wywołanie funkcji
enable_attach
w celu uwzględnienia argumentówcertfile
ikeyfile
przy użyciu nazw plików jako wartości. Te argumenty mają takie samo znaczenie jak w przypadku standardowejssl.wrap_socket
funkcji języka Python.ptvsd.enable_attach(secret='my_secret', certfile='cert.cer', keyfile='cert.key')
Możesz również wprowadzić tę samą zmianę w pliku kodu na komputerze lokalnym. Ponieważ ten kod nie jest w rzeczywistości uruchamiany, nie jest to ściśle konieczne.
Uruchom ponownie program w języku Python na komputerze zdalnym, aby był gotowy do debugowania.
zabezpieczyć kanał, dodając certyfikat do zaufanego głównego urzędu certyfikacji na komputerze z systemem Windows za pomocą programu Visual Studio:
Skopiuj plik certyfikatu z komputera zdalnego do komputera lokalnego.
Otwórz Panel sterowania i przejdź do Narzędzia systemu Windows>Zarządzanie certyfikatami komputerów.
W oknie dialogowym certlm [Certyfikaty — komputer lokalny] rozwiń węzeł Zaufanych głównych urzędów certyfikacji, kliknij prawym przyciskiem myszy Certyfikatyi wybierz pozycję Wszystkie zadania>Importuj.
Przejdź do pliku .cer skopiowanego z komputera zdalnego i wybierz go.
Przejdź do okna dialogowego z monitami, aby ukończyć proces importowania.
Powtórz proces dołączania w programie Visual Studio, jak opisano wcześniej w dołączaniu zdalnym za pomocą narzędzi Python Tools.
W tym wystąpieniu zdefiniuj
tcps://
jako protokół celu połączenia (lub kwalifikator).
Rozwiązywanie problemów z połączeniem
Podczas próby połączenia program Visual Studio może napotkać problemy. Zapoznaj się z poniższymi scenariuszami i w razie potrzeby podejmij odpowiednie działania.
Program Visual Studio ostrzega przed potencjalnymi problemami z certyfikatami podczas nawiązywania połączenia za pośrednictwem protokołu SSL.
akcja: możesz zignorować komunikat i kontynuować.
Ostrożność
Należy pamiętać, że chociaż kanał jest nadal szyfrowany przed podsłuchiwaniem, może być otwarty na ataki typu man-in-the-middle.
Program Visual Studio wyświetla ostrzeżenie, że zdalny certyfikat nie jest zaufany.
Problem: certyfikat nie został poprawnie dodany do Zaufanych Głównych Urzędów Certyfikacji.
Akcja: sprawdź ponownie kroki, aby dodać certyfikat do zaufanego głównego urzędu certyfikacji na komputerze z systemem Windowsi spróbuj ponownie nawiązać połączenie.
Program Visual Studio wyświetla ostrzeżenie nazwa zdalnego certyfikatu nie pasuje do nazwy hosta.
Problem: dla certyfikatu nie określono właściwej nazwy hosta lub adresu IP dla Common Name.
Akcja: Ponownie sprawdź kroki w Zabezpiecz połączenie z użyciem TCPS. Pamiętaj, aby użyć poprawnej nazwy pospolitej podczas tworzenia certyfikatu i spróbuj ponownie nawiązać połączenie.