Sdílet prostřednictvím


Vzdálené ladění kódu Pythonu v Linuxu v sadě Visual Studio

V tomto článku se dozvíte, jak nakonfigurovat instalaci sady Visual Studio tak, aby podporovala ladění kódu Pythonu na vzdálených počítačích s Linuxem. Tento názorný postup vychází ze sady Visual Studio 2019 verze 16.6.

Visual Studio může spouštět a ladit aplikace Pythonu místně a vzdáleně na počítači s Windows. Visual Studio také podporuje vzdálené ladění v jiném operačním systému, zařízení nebo implementaci Pythonu než CPython pomocí knihovny debugpy.

Visual Studio 2019 verze 16.4 a starší používá knihovnu ptvsd. V prostředí Visual Studio 2019 verze 16.5 a novější knihovna s názvem debugpy nahrazuje ptvsd. Když používáte debugpy, kód Pythonu, který je laděný, hostuje ladicí server, ke kterému může Visual Studio připojit. Toto hostování vyžaduje malou úpravu kódu pro import a povolení serveru. Možná budete také muset upravit konfiguraci sítě nebo brány firewall na vzdáleném počítači tak, aby umožňovala připojení TCP.

Požadavky

  • Visual Studio nainstalované s podporou úloh Pythonu Další informace najdete v tématu Instalace podpory Pythonu v sadě Visual Studio.

  • Vzdálený počítač s Pythonem v operačním systému, jako je macOS nebo Linux.

  • Port 5678 (příchozí) se otevře v bráně firewall vzdáleného počítače, což je výchozí nastavení pro vzdálené ladění.

Nastavení počítače s Linuxem

Virtuální počítač s Linuxem můžete snadno vytvořit v Azure a k němu přistupovat pomocí Vzdálené plochy z Windows. Ubuntu pro virtuální počítač je pohodlné, protože Python je ve výchozím nastavení nainstalovaný. Pokud máte jinou konfiguraci, přečtěte si téma Instalace interpretů Pythonu pro další umístění pro stahování Pythonu.

Konfigurujte bránu firewall

Příchozí port 5678 musí být otevřený ve firewallu vzdáleného počítače pro podporu vzdáleného ladění.

Podrobnosti o tom, jak vytvořit pravidlo brány firewall pro virtuální počítač Azure, najdete v následujících článcích:

Příprava skriptu pro ladění

Postupujte podle těchto kroků a připravte skript pro ladění kódu Pythonu v Linuxu.

  1. Na vzdáleném počítači vytvořte soubor Pythonu s názvem guessing-game.py s následujícím kódem:

    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. Pomocí příkazu pip3 install debugpy nainstalujte do svého prostředí balíček debugpy.

    Poznámka

    Je vhodné zaznamenat verzi debugpy, která je nainstalována, v případě, že ji budete potřebovat pro řešení problémů. seznam debugpy také zobrazuje dostupné verze.

  3. Povolte vzdálené ladění přidáním následujícího kódu do horní části souboru guessing-game.py před jiným kódem. (I když není striktní požadavek, není možné ladit žádná vlákna na pozadí, která vznikla před zavoláním funkce listen.)

    import debugpy
    debugpy.listen(('0.0.0.0', 5678))
    
  4. Uložte soubor a spusťte program:

    python3 guessing-game.py
    

    Volání funkce listen probíhá na pozadí a během vaší interakce s programem čeká na příchozí připojení. V případě potřeby můžete volat funkci wait_for_client po volání funkce listen, aby se program zablokoval, dokud se ladicí program nepřipojí.

Rada

Kromě funkcí listen a wait_for_client poskytuje debugpy také pomocnou funkci breakpoint. Tato funkce slouží jako programový bod přerušení, pokud je připojen ladicí program. Další funkce, is_client_connected1, vrátí True, pokud je ladicí program připojen. Před voláním jiných funkcí debugpy nemusíte tento výsledek kontrolovat.

Vzdálené připojení z Nástrojů Pythonu

Následující kroky ukazují, jak nastavit zarážku pro zastavení vzdáleného procesu.

  1. Vytvořte kopii vzdáleného souboru v místním počítači a otevřete ho v sadě Visual Studio. Nezáleží na tom, kde se soubor nachází, ale jeho název by se měl shodovat s názvem skriptu na vzdáleném počítači.

  2. (Volitelné) Pokud chcete mít IntelliSense pro debugpy na místním počítači, nainstalujte balíček debugpy do prostředí Pythonu.

  3. Vyberte Ladění>Připojit k procesu.

  4. V dialogovém okně Připojit k procesu nastavte typ připojení na vzdálené (ladění) Pythonu.

  5. Do pole Cíl připojení zadejte příkaz tcp://<ip_address>:5678.

    • tcp:// určuje typ připojení jako TCP (Transmission Control Protocol).
    • <ip_address> je IP adresa vzdáleného počítače, což může být explicitní adresa nebo název, jako je myvm.cloudapp.net.
    • :5678 je číslo portu pro vzdálené ladění.
  6. Výběrem a stisknutím klávesy Enter naplníte seznam dostupných procesů debugpy na tomto počítači.

    Snímek obrazovky, který ukazuje, jak zadat cílové připojení a zobrazit seznam dostupných procesů debugpy.

    Pokud po naplnění tohoto seznamu spustíte jiný program na vzdáleném počítači, vyberte tlačítko Aktualizovat.

  7. Vyberte proces, který chcete ladit, a vyberte Připojitnebo poklikejte na proces.

  8. Visual Studio se přepne do režimu ladění, zatímco skript nadále běží na vzdáleném počítači, přičemž poskytuje všechny obvyklé možnosti ladění.

    Na řádku if guess < number: můžete nastavit bod přerušení, a pak přepnout na vzdálený počítač a zadat další odhad. Visual Studio na místním počítači se zastaví na zarážce, zobrazí místní proměnné atd.:

    Snímek obrazovky, který ukazuje, jak Visual Studio pozastaví ladění při dosažení zarážky.

  9. Když zastavíte ladění, Visual Studio se od aplikace odpojí. Program bude dál běžet na vzdáleném počítači. debugpy také nadále naslouchá připojení ladicích nástrojů, takže se k procesu můžete kdykoli znovu připojit.

Řešení potíží s připojením

Projděte si následující body, které vám pomůžou s řešením potíží s připojením.

  • Ujistěte se, že jste jako typu připojení vybrali vzdálené Pythonu (debugpy).

  • Potvrďte, že tajemství v cílovém připojení přesně odpovídá tajemství ve vzdáleném kódu.

  • Ověřte, že IP adresa v cíli připojení odpovídá adrese vzdáleného počítače.

  • Ověřte, že je otevřený port vzdáleného ladění na vzdáleném počítači a cíl připojení obsahuje příponu portu, například :5678.

    Pokud chcete použít jiný port, zadejte číslo portu ve volání funkce listen, jako v debugpy.listen((host, port)). V takovém případě nezapomeňte otevřít konkrétní port v bráně firewall.

  • Ověřte, že verze debugpy nainstalovaná ve vzdáleném počítači (vrácená příkazem pip3 list) odpovídá verzi sady Visual Studio Python Tools (PTVS).

    Následující tabulka uvádí platné páry verzí. Podle potřeby aktualizujte verzi debugpy na vzdáleném počítači.

    Visual Studio Python Tools debugpy
    2019 16.6 1.0.0b5 1.0.0b5
    2019 16.5 1.0.0b1 1.0.0b1

Poznámka

Visual Studio 2019 verze 16.0-16.4 využívalo ptvsd, nikoli debugpy. Proces v tomto názorném postupu pro tyto verze je podobný, ale názvy funkcí se liší. Visual Studio 2019 verze 16.5 používá debugpy, ale názvy funkcí byly stejné jako v ptvsd. Místo listenbyste použili enable_attach. Místo wait_for_clientbyste použili wait_for_attach. Místo breakpointbyste použili break_into_debugger.

Použití ptvsd 3.x pro starší ladění

Starší ladicí program ptvsd 3.x je výchozí v sadě Visual Studio 2017 verze 15.7 a starší.

V závislosti na konfiguraci sady Visual Studio možná budete muset použít ptvsd 3.x pro vzdálené ladění:

  • Visual Studio 2017 verze 15.7 a starší s Pythonem 2.6, 3.1 až 3.4 nebo IronPython
  • Visual Studio 2019 verze 16.5 a novější s Pythonem 2.6, 3.1 až 3.4 nebo IronPython
  • Dřívější verze 4.x

Pokud vaše konfigurace implementuje scénář starší verze, Visual Studio zobrazí chybu Ladicí program nepodporuje toto prostředí Pythonu.

Nastavení vzdáleného ladění

Pokud se chcete připravit na vzdálené ladění pomocí ptvsd 3.x, proveďte následující kroky:

  1. Nastavte tajný kód, který slouží k omezení přístupu ke spuštěném skriptu.

    V ptvsd 3.x funkce enable_attach vyžaduje, abyste jako první argument předali "tajný kód".

    • Při připojení vzdáleného ladicího programu zadejte tajný kód pomocí příkazu enable_attach(secret="<secret>").

    I když můžete povolit připojení kohokoli pomocí příkazu enable_attach(secret=None), tato možnost se nedoporučuje.

  2. Vytvořte cílovou adresu URL připojení ve formuláři tcp://<secret>@<ip_address>:5678.

    • tcp:// určuje typ připojení jako TCP.
    • <secret> je řetězec předaný funkcí enable_attach v kódu Pythonu.
    • <ip_address> je IP adresa vzdáleného počítače, což může být explicitní adresa nebo název, jako je myvm.cloudapp.net.
    • :5678 je číslo portu pro vzdálené ladění.

Zabezpečené připojení pomocí protokolu TCPS

Ve výchozím nastavení je připojení k vzdálenému ladicího serveru ptvsd 3.x zabezpečené pouze tajným kódem a všechna data se předávají ve formátu prostého textu. Pro bezpečnější připojení podporuje ptvsd 3.x protokol SSL pomocí zabezpečeného formátu protokolu TCP nebo TCPS.

Pomocí následujících kroků nakonfigurujte ptvsd 3.x pro práci s protokolem TCPS:

  1. Ve vzdáleném počítači pomocí příkazu openssl vygenerujte samostatné soubory pro klíč a certifikát podepsaný svým držitelem:

    openssl req -new -x509 -days 365 -nodes -out cert.cer -keyout cert.key
    
    • Na příkazovém řádku openssl zadejte jméno hostitele nebo IP adresu, kterou používáte k připojení k obecný název.

    Další informace najdete v tématu certifikáty podepsané svým držitelem v dokumentaci k modulu ssl Pythonu. Všimněte si, že příkaz popsaný v dokumentaci Pythonu generuje pouze jeden sloučený soubor.

  2. V kódu upravte volání funkce enable_attach tak, aby zahrnovalo certfile a keyfile argumenty pomocí názvů souborů jako hodnot. Tyto argumenty mají stejný význam jako u standardní funkce ssl.wrap_socket Pythonu.

    ptvsd.enable_attach(secret='my_secret', certfile='cert.cer', keyfile='cert.key')
    

    Stejnou změnu v souboru kódu můžete provést také v místním počítači. Vzhledem k tomu, že se tento kód ve skutečnosti nespustí, není nezbytně nutné.

  3. Restartujte program Pythonu na vzdáleném počítači, aby byl připravený k ladění.

  4. zabezpečte kanál přidáním certifikátu do důvěryhodných kořenových certifikačních autorit na počítači s Windows pomocí sady Visual Studio:

    1. Zkopírujte soubor certifikátu ze vzdáleného počítače do místního počítače.

    2. Otevřete Ovládací panely a přejděte na Nástroje systému Windows>Správa certifikátů počítače.

    3. V dialogovém okně certlm [Certifikáty – místní počítač] rozbalte uzel Důvěryhodné kořenové certifikační autority. Klikněte pravým tlačítkem na Certifikátya vyberte Všechny úlohy>Import.

    4. Vyhledejte a vyberte soubor .cer zkopírovaný ze vzdáleného počítače.

    5. Pokračujte v dialogových výzev k dokončení procesu importu.

  5. Opakujte proces připojení v sadě Visual Studio, jak je popsáno výše v části Připojit na dálku z nástrojů Python Tools.

    Pro tuto instanci definujte tcps:// jako protokol pro cílový bod připojení (nebo kvalifikátor ).

    snímek obrazovky, který ukazuje, jak zadat TCPS jako transport pro vzdálené ladění pomocí SSL.

Řešení problémů s připojením

Během pokusu o připojení může visual Studio narazit na problémy. Projděte si následující scénáře a podle potřeby proveďte příslušnou akci.

  • Visual Studio varuje před potenciálními problémy s certifikáty při připojování přes PROTOKOL SSL.

    Akce: Zprávu můžete ignorovat a pokračovat.

    Opatrnost

    Mějte na paměti, že i když je kanál stále šifrovaný proti odposlouchávání, může být otevřený útokům man-in-the-middle.

  • Visual Studio zobrazí upozornění, že vzdálený certifikát není důvěryhodný.

    Problém: Certifikát není správně přidán do důvěryhodné kořenové certifikační autority.

    akce: Znovu zkontrolujte postup přidání certifikátu do důvěryhodné kořenové certifikační autority na počítači s Windowsa zkuste připojení zopakovat.

    snímek obrazovky s upozorněním, že vzdálený certifikát SSL není důvěryhodný.

  • Visual Studio zobrazí upozornění, že název vzdáleného certifikátu neodpovídá názvu hostitele.

    Problém: Pro běžný název certifikátu není zadaný správný název hostitele nebo IP adresa.

    akce: Znovu zkontrolujte kroky v Zabezpečte připojení pomocí protokolu TCPS. Při vytváření certifikátu nezapomeňte použít správný běžný název a zkuste připojení zopakovat.

    snímek obrazovky s upozorněním, že vzdálený certifikát SSL neodpovídá názvu hostitele.