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 debugowania.
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 debugowania zastępuje plik ptvsd. W przypadku korzystania z debugowania kod języka Python debugowany hostuje serwer debugowania, do którego można dołączyć 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.
Wymagania 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 Mac OSX lub Linux.
Port 5678 (przychodzący) jest otwarty w zaporze komputera zdalnego, co jest ustawieniem domyślnym debugowania zdalnego.
Konfigurowanie komputera z systemem Linux
Maszynę wirtualną z systemem Linux można łatwo utworzyć 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
Port przychodzący 5678 musi być otwarty w zaporze komputera zdalnego w celu obsługi zdalnego debugowania.
Aby uzyskać szczegółowe informacje na temat tworzenia reguły zapory dla maszyny wirtualnej platformy Azure, zobacz następujące artykuły:
- Filtrowanie ruchu sieciowego przy użyciu sieciowej grupy zabezpieczeń przy użyciu witryny Azure Portal
- 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))
debugpy
Zainstaluj pakiet w środowisku przy użyciupip3 install debugpy
polecenia .Uwaga
Dobrym pomysłem jest zarejestrowanie wersji debugpy zainstalowanej w przypadku, gdy będzie potrzebny do rozwiązywania problemów. Lista debugowania zawiera również 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 zduplikowanych przed wywołaniem
listen
funkcji).import debugpy debugpy.listen(('0.0.0.0', 5678))
Zapisz plik i uruchom program:
python3 guessing-game.py
Wywołanie
listen
funkcji jest uruchamiane w tle i czeka na połączenia przychodzące podczas interakcji z programem. W razie potrzeby można wywołaćwait_for_client
funkcję po wywołaniulisten
funkcji w celu zablokowania programu do momentu dołączenia debugera.
Napiwek
Oprócz listen
funkcji i wait_for_client
debugpy udostępnia również funkcję breakpoint
pomocnika . Ta funkcja służy jako programowy punkt przerwania, jeśli debuger jest dołączony. Inna funkcja zwraca True
wartość is_client_connected1
, jeśli debuger jest dołączony. Nie musisz sprawdzać tego wyniku przed wywołaniem innych debugpy
funkcji.
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łączanie do procesu.
W oknie dialogowym Dołączanie do procesu ustaw typ Połączenie ion na zdalny (debugpy) języka Python.
W polu cel Połączenie ion wprowadź polecenie
tcp://<ip_address>:5678
.tcp://
określa typ połączenia jako Protokół TCP (Transmission Control Protocol).<ip_address>
to adres IP komputera zdalnego, który może być jawnym adresem lub nazwą, taką jak myvm.cloudapp.net.:5678
to numer portu debugowania zdalnego.
Wybierz klawisz Enter, 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 pozycję Dołącz lub kliknij dwukrotnie proces.
Program Visual Studio przełącza się w tryb debugowania, gdy skrypt nadal działa na komputerze zdalnym, zapewniając wszystkie typowe możliwości debugowania .
Możesz ustawić punkt przerwania w
if guess < number:
wierszu, a następnie przełączyć się na komputer zdalny i wprowadzić inną wartość. 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 pozycję Zdalne (debugpy) języka Python dla typu Połączenie ion.
Upewnij się, że wpis tajny w obiekcie docelowym Połączenie ion dokładnie pasuje do wpisu tajnego w kodzie zdalnym.
Upewnij się, że adres IP w Połączenie ion Target 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
listen
funkcji, jak w plikudebugpy.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
pip3 list
polecenie) 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
Uwaga
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. listen
Zamiast polecenia należy użyć polecenia enable_attach
. wait_for_client
Zamiast polecenia należy użyć polecenia wait_for_attach
. breakpoint
Zamiast polecenia należy użyć polecenia break_into_debugger
.
Używanie pliku ptvsd 3.x do debugowania w starszej 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 wpis tajny, który służy do ograniczania dostępu do uruchomionego skryptu.
W pliku ptvsd 3.x
enable_attach
funkcja wymaga przekazania "wpisu tajnego" jako pierwszego argumentu.- Po dołączeniu zdalnego debugera wprowadź wpis tajny za
enable_attach(secret="<secret>")
pomocą polecenia .
Mimo że można zezwolić wszystkim na nawiązywanie połączenia przy użyciu
enable_attach(secret=None)
polecenia , ta opcja nie jest zalecana.- Po dołączeniu zdalnego debugera wprowadź wpis tajny za
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>
to adres 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 tylko przez wpis tajny, a wszystkie dane są przekazywane 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
openssl
polecenia , 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
- Po wyświetleniu monitu
openssl
wprowadź nazwę hosta lub adres IP używany do nawiązania połączenia dla nazwy pospolitej.
Aby uzyskać więcej informacji, zobacz Certyfikaty z podpisem własnym w dokumentacji modułu języka Python
ssl
. Pamiętaj, że polecenie opisane w dokumentacji języka Python generuje tylko jeden połączony plik.- Po wyświetleniu monitu
W kodzie zmodyfikuj wywołanie
enable_attach
funkcji w celu uwzględnieniacertfile
argumentów 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.
Zabezpiecz 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 pozycji Narzędzia systemu>Windows Zarządzaj certyfikatami komputerów.
W oknie dialogowym certlm [Certyfikaty — komputer lokalny] rozwiń węzeł Zaufane główne urzędy certyfikacji, kliknij prawym przyciskiem myszy pozycję Certyfikaty i wybierz pozycję Wszystkie zadania>importu.
Przejdź do i wybierz plik .cer skopiowany z komputera zdalnego.
Przejdź do okna dialogowego z monitami, aby ukończyć proces importowania.
Powtórz proces dołączania w programie Visual Studio, zgodnie z opisem we wcześniejszej sekcji Dołączanie zdalnie z narzędzi języka Python.
W tym przypadku zdefiniuj
tcps://
jako protokół obiektu docelowego Połączenie ion (lub kwalifikatora).
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ć.
Uwaga
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 certyfikat zdalny nie jest zaufanym ostrzeżeniem.
Problem: Certyfikat nie został poprawnie dodany do zaufanego głównego urzędu certyfikacji.
Akcja: Sprawdź ponownie kroki dodawania certyfikatu do zaufanego głównego urzędu certyfikacji na komputerze z systemem Windows i spróbuj ponownie nawiązać połączenie.
Program Visual Studio wyświetla nazwę certyfikatu zdalnego niezgodne z ostrzeżeniem o nazwie hosta.
Problem: Prawidłowa nazwa hosta lub adres IP nie jest określona dla nazwy pospolitej certyfikatu.
Akcja: Sprawdź ponownie kroki opisane w temacie Zabezpieczanie połączenia za pomocą protokołu TCPS. Pamiętaj, aby użyć poprawnej nazwy pospolitej podczas tworzenia certyfikatu i spróbuj ponownie nawiązać połączenie.