Dela via


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:

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.

  1. 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))
    
  2. Installera debugpy-paketet i din miljö med hjälp av kommandot pip3 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.

  3. 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))
    
  4. 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 funktionen wait_for_client efter att du har anropat funktionen listen 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.

  1. 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.

  2. (Valfritt) Om du vill ha IntelliSense för felsökning på den lokala datorn installerar du felsökningspaketet i Python-miljön.

  3. Välj Felsöka>Koppla till process.

  4. I dialogrutan Koppla till process ställer du in anslutningstyp till Python-fjärr (debugpy).

  5. 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.
  6. Välj Ange för att fylla i listan över tillgängliga felsökningsprocesser på datorn:

    Skärmbild som visar hur du anger anslutningsmål för att se en lista över tillgängliga felsökningsprocesser.

    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.

  7. Välj den process som du vill felsöka och välj Bifoga, eller dubbelklicka på processen.

  8. 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:

    Skärmbild som visar hur Visual Studio pausar felsökningen när en brytpunkt nås.

  9. 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 i debugpy.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 listenanvänder du enable_attach. I stället för wait_for_clientanvänder du wait_for_attach. I stället för breakpointanvä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:

  1. 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.

  2. 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 funktionen enable_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:

  1. 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.

  2. I koden ändrar du anropet till funktionen enable_attach så att det innehåller certfile och keyfile argument med hjälp av filnamnen som värden. Dessa argument har samma betydelse som för funktionen standard ssl.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.

  3. Starta om Python-programmet på fjärrdatorn så att det är redo för felsökning.

  4. Skydda kanalen genom att lägga till certifikatet i Betrodda rotcertifikatmyndigheten på Windows-datorn med Visual Studio.

    1. Kopiera certifikatfilen från fjärrdatorn till den lokala datorn.

    2. Öppna Kontrollpanelen och gå till Windows-verktyg>Hantera datorcertifikat.

    3. I dialogrutan certlm [Certifikat – lokal dator] expanderar du noden Betrodda rotcertifikatutfärdare, högerklickar på Certifikatoch väljer Alla uppgifter>Importera.

    4. Bläddra till och välj den .cer fil som kopierats från fjärrdatorn.

    5. Fortsätt genom dialogrutorna för att slutföra importprocessen.

  5. 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).

    Skärmbild som visar hur du anger TCPS som fjärrfelsökningstransport med SSL.

Å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.

    Skärmbild av varningen om att SSL-certifikatet för fjärranslutningen inte är pålitligt.

  • 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.

    Skärmbild av varningen om att fjärr-SSL-certifikatet inte matchar värdnamnet.