Fjärrfelsöka Python-kod på Linux i Visual Studio
I den här artikeln utforskar du hur du konfigurerar Visual Studio-installationen för att stödja felsökning av Python-kod på linux-fjärrdatorer. Den här genomgången baseras på Visual Studio 2019 version 16.6.
Visual Studio kan starta och felsöka Python-program lokalt och via fjärranslutning på en Windows-dator. Visual Studio stöder även felsökning via fjärranslutning på ett annat operativsystem, en annan enhet eller Python-implementering än CPython med hjälp av felsökningsbiblioteket.
Visual Studio 2019 version 16.4 och tidigare använder ptvsd-biblioteket. I Visual Studio 2019 version 16.5 och senare ersätter felsökningsbiblioteket ptvsd. När du använder debugpy, är Python-koden som felsöks värd för den debugserver som Visual Studio kan ansluta till. Den här värddatorn kräver en liten ändring av koden för att importera och aktivera servern. Du kan också behöva justera nätverks- eller brandväggskonfigurationerna på fjärrdatorn för att tillåta TCP-anslutningar.
Förutsättningar
Visual Studio installerat med stöd för Python-arbetsbelastningar. Mer information finns i Installera Python-stöd i Visual Studio.
En fjärrdator som kör Python på ett operativsystem som macOS eller Linux.
Port 5678 (inkommande) öppnas i fjärrdatorns brandvägg, vilket är standardvärdet för fjärrfelsökning.
Konfigurera en Linux-dator
Du kan enkelt skapa en virtuell Linux-dator på Azure och komma åt den med hjälp av Fjärrskrivbord från Windows. Ubuntu för den virtuella datorn är praktiskt eftersom Python är installerat som standard. Om du har en annan konfiguration kan du läsa Installera Python-tolkar för andra nedladdningsplatser för Python.
Konfigurera brandväggen
Den inkommande porten 5678 måste vara öppen i fjärrdatorns brandvägg för att stödja fjärrfelsökning.
Mer information om hur du skapar en brandväggsregel för en virtuell Azure-dator finns i följande artiklar:
- Filtrera nätverkstrafik med en nätverkssäkerhetsgrupp med hjälp av Azure-portalen
- Dirigera nätverkstrafik med en routningstabell med azure-portalen
- Distribuera och konfigurera Azure Firewall med hjälp av Azure-portalen
Förbereda skriptet för felsökning
Följ de här stegen för att förbereda ett skript för felsökning av Python-koden i Linux.
På fjärrdatorn skapar du en Python-fil med namnet guessing-game.py med följande kod:
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))
Installera
debugpy
-paketet i din miljö med hjälp av kommandotpip3 install debugpy
.Anteckning
Det är en bra idé att notera vilken version av debugpy som är installerad ifall du behöver det för felsökning. Den debugpy-listan visar också tillgängliga versioner.
Aktivera fjärrfelsökning genom att lägga till följande kod överst i filen guessing-game.py före annan kod. (Även om det inte är ett strikt krav är det omöjligt att felsöka några bakgrundstrådar som skapas innan funktionen
listen
anropas.)import debugpy debugpy.listen(('0.0.0.0', 5678))
Spara filen och kör programmet:
python3 guessing-game.py
Anropet till funktionen
listen
körs i bakgrunden och väntar på inkommande anslutningar när du interagerar med programmet. Om du vill kan du anropa funktionenwait_for_client
efter att du har anropat funktionenlisten
för att blockera programmet tills felsökaren har anslutits.
Tips
Förutom funktionerna listen
och wait_for_client
tillhandahåller debugpy även en hjälpfunktion breakpoint
. Den här funktionen fungerar som en programmatisk brytpunkt om felsökningsprogrammet är kopplat. En annan funktion, is_client_connected1
, returnerar True
om felsökningsprogrammet är kopplat. Du behöver inte kontrollera det här resultatet innan du anropar andra debugpy
funktioner.
Fjärranslut från Python-verktyg
Följande steg visar hur du anger en brytpunkt för att stoppa fjärrprocessen.
Skapa en kopia av fjärrfilen på den lokala datorn och öppna den i Visual Studio. Det spelar ingen roll var filen finns, men namnet ska matcha namnet på skriptet på fjärrdatorn.
(Valfritt) Om du vill ha IntelliSense för felsökning på den lokala datorn installerar du felsökningspaketet i Python-miljön.
Välj Felsöka>Koppla till process.
I dialogrutan Koppla till process ställer du in anslutningstyp till Python-fjärr (debugpy).
I fältet Anslutningsmål anger du kommandot
tcp://<ip_address>:5678
.-
tcp://
anger anslutningstypen som TCP (Transmission Control Protocol). -
<ip_address>
är IP-adressen för fjärrdatorn, som kan vara en explicit adress eller ett namn som myvm.cloudapp.net. -
:5678
är portnumret för fjärrfelsökning.
-
Välj Ange för att fylla i listan över tillgängliga felsökningsprocesser på datorn:
Om du råkar starta ett annat program på fjärrdatorn när du har fyllt i den här listan väljer du knappen Uppdatera.
Välj den process som du vill felsöka och välj Bifoga, eller dubbelklicka på processen.
Visual Studio växlar till felsökningsläge medan skriptet fortsätter att köras på fjärrdatorn, vilket ger alla vanliga felsökning funktioner.
Du kan ange en brytpunkt på raden
if guess < number:
och sedan växla över till fjärrdatorn och ange en annan gissning. Visual Studio på din lokala dator stoppas vid brytpunkten, visar lokala variabler och så vidare:När du slutar felsöka kopplas Visual Studio från programmet. Programmet fortsätter att köras på fjärrdatorn. debugpy fortsätter också att lyssna efter anslutning av debuggrar, så att du kan återansluta till processen igen när som helst.
Felsöka anslutningen
Granska följande punkter för att felsöka problem med anslutningen.
Kontrollera att du väljer Python fjärranslutning (debugpy) för anslutningstyp.
Bekräfta att hemligheten i anslutningsmålet exakt matchar hemligheten i fjärrkoden.
Bekräfta att IP-adressen i anslutningsmålet matchar fjärrdatorns.
Kontrollera att fjärrfelsökningsporten på fjärrdatorn är öppen och att anslutningsmålet innehåller portsuffixet, till exempel
:5678
.Om du vill använda en annan port anger du portnumret i anropet till funktionen
listen
, som idebugpy.listen((host, port))
. I det här fallet måste du öppna den specifika porten i brandväggen.Bekräfta att den felsökningsversion som är installerad på fjärrdatorn (som returneras av kommandot
pip3 list
) matchar VISUAL Studio Python Tools-versionen (PTVS).I följande tabell visas de giltiga versionsparen. Vid behov uppdaterar du versionen av debugpy på fjärrdatorn.
Visual Studio Python-verktyg debugpy 2019 16.6 1.0.0b5 1.0.0b5 2019 16.5 1.0.0b1 1.0.0b1
Anteckning
Visual Studio 2019 version 16.0-16.4 använde ptvsd, inte debugpy. Processen i den här genomgången för dessa versioner är liknande, men funktionsnamnen skiljer sig åt. Visual Studio 2019 version 16.5 använder debugpy, men funktionsnamnen var desamma som i ptvsd. I stället för listen
använder du enable_attach
. I stället för wait_for_client
använder du wait_for_attach
. I stället för breakpoint
använder du break_into_debugger
.
Använda ptvsd 3.x för äldre felsökning
Det äldre felsökningsprogrammet ptvsd 3.x är standard i Visual Studio 2017 version 15.7 och tidigare.
Beroende på din Visual Studio-konfiguration kan du behöva använda ptvsd 3.x för fjärrfelsökning:
- Visual Studio 2017 version 15.7 och tidigare med Python 2.6, 3.1 till 3.4 eller IronPython
- Visual Studio 2019 version 16.5 och senare med Python 2.6, 3.1 till 3.4 eller IronPython
- Tidiga 4.x-versioner
Om konfigurationen implementerar ett äldre versionsscenario visar Visual Studio felet Felsökaren stöder inte den här Python-miljön.
Konfigurera fjärrfelsökning
Förbered för fjärrfelsökning med ptvsd 3.x genom att utföra följande steg:
Konfigurera din hemlighet, som används för att begränsa åtkomsten till skriptet som körs.
I ptvsd 3.x kräver funktionen
enable_attach
att du skickar en "hemlighet" som det första argumentet.- När du kopplar fjärrfelsökaren anger du hemligheten med kommandot
enable_attach(secret="<secret>")
.
Du kan tillåta vem som helst att ansluta med hjälp av kommandot
enable_attach(secret=None)
, men det här alternativet rekommenderas inte.- När du kopplar fjärrfelsökaren anger du hemligheten med kommandot
Skapa din url för anslutningsmål i formuläret
tcp://<secret>@<ip_address>:5678
.-
tcp://
anger anslutningstypen som TCP. -
<secret>
är strängen som skickas med funktionenenable_attach
i Python-koden. -
<ip_address>
är IP-adressen för fjärrdatorn, som kan vara en explicit adress eller ett namn som myvm.cloudapp.net. -
:5678
är portnumret för fjärrfelsökning.
-
Säker anslutning med TCPS-protokoll
Som standard skyddas anslutningen till fjärrfelsökningsservern ptvsd 3.x endast av hemligheten och alla data skickas i oformaterad text. För en säkrare anslutning stöder ptvsd 3.x SSL med hjälp av TCP-protokollets säkra form eller TCPS-.
Använd följande steg för att konfigurera ptvsd 3.x så att det fungerar med TCPS-protokollet:
På fjärrdatorn använder du kommandot
openssl
för att generera separata filer för nyckeln och det självsignerade certifikatet:openssl req -new -x509 -days 365 -nodes -out cert.cer -keyout cert.key
- Ange det värdnamn eller DEN IP-adress som du använder för att ansluta för Common Namei
openssl
prompten.
Mer information finns i självsignerade certifikat i dokumentationen för Python
ssl
-modulen. Observera att kommandot som beskrivs i Python-dokumentationen endast genererar en enda kombinerad fil.- Ange det värdnamn eller DEN IP-adress som du använder för att ansluta för Common Namei
I koden ändrar du anropet till funktionen
enable_attach
så att det innehållercertfile
ochkeyfile
argument med hjälp av filnamnen som värden. Dessa argument har samma betydelse som för funktionen standardssl.wrap_socket
Python.ptvsd.enable_attach(secret='my_secret', certfile='cert.cer', keyfile='cert.key')
Du kan också göra samma ändring i kodfilen på den lokala datorn. Eftersom den här koden inte körs är det inte absolut nödvändigt.
Starta om Python-programmet på fjärrdatorn så att det är redo för felsökning.
Skydda kanalen genom att lägga till certifikatet i Betrodda rotcertifikatmyndigheten på Windows-datorn med Visual Studio.
Kopiera certifikatfilen från fjärrdatorn till den lokala datorn.
Öppna Kontrollpanelen och gå till Windows-verktyg>Hantera datorcertifikat.
I dialogrutan certlm [Certifikat – lokal dator] expanderar du noden Betrodda rotcertifikatutfärdare, högerklickar på Certifikatoch väljer Alla uppgifter>Importera.
Bläddra till och välj den .cer fil som kopierats från fjärrdatorn.
Fortsätt genom dialogrutorna för att slutföra importprocessen.
Upprepa anslutningsprocessen i Visual Studio, enligt tidigare beskrivning i Anslutning på distans från Python Tools.
För den här instansen definierar du
tcps://
som protokoll för Anslutningsmål (eller Qualifier).
Åtgärda anslutningsproblem
Under anslutningsförsöket kan Visual Studio stöta på problem. Granska följande scenarier och vidta lämpliga åtgärder efter behov.
Visual Studio varnar för potentiella certifikatproblem vid anslutning via SSL.
Åtgärd: Du kan ignorera meddelandet och fortsätta.
Försiktighet
Tänk på att även om kanalen fortfarande är krypterad mot avlyssning kan den vara öppen för man-in-the-middle-attacker.
Visual Studio visar fjärrcertifikatet inte är betrott varning.
Problem: Certifikatet läggs inte till korrekt i den betrodda rotcertifikatutfärdarlistan.
Åtgärd: Kontrollera stegen igen för att lägga till certifikatet i betrodd rotcertifikatutfärdare på Windows-datornoch försök sedan ansluta igen.
Visual Studio visar varningen att fjärrcertifikatnamnet inte matchar värdnamnet.
Problem: Rätt värdnamn eller IP-adress har inte angetts för Common Name för certifikatet.
Åtgärd: Kontrollera stegen igen i Skydda anslutningen med TCPS-. Se till att använda rätt common name när du skapar certifikatet och försök ansluta igen.