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 sadě Visual Studio 2019 verze 16.5 a novější nahrazuje knihovna debugpy 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 Mac OSX 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 přistupovat k němu 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 jiná umístění pro stahování Pythonu.
Konfigurace brány firewall
Příchozí port 5678 musí být otevřený v bráně firewall vzdáleného počítače, aby bylo možné podporovat vzdálené 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:
- Filtrování síťového provozu pomocí skupiny zabezpečení sítě pomocí webu Azure Portal
- Směrování síťového provozu pomocí směrovací tabulky pomocí webu Azure Portal
- Nasazení a konfiguraci brány Azure Firewall pomocí webu Azure Portal
Příprava skriptu pro ladění
Postupujte podle těchto kroků a připravte skript pro ladění kódu Pythonu v Linuxu.
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))
debugpy
Pomocí příkazu nainstalujte balíček do svého prostředípip3 install debugpy
.Poznámka:
Je vhodné zaznamenat verzi ladicího programu, která je nainstalovaná v případě, že ji potřebujete pro řešení potíží. V seznamu ladění se také zobrazují dostupné verze.
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ž to není striktní požadavek, není možné ladit žádná vlákna na pozadí, která vznikla před
listen
zavoláním funkce.)import debugpy debugpy.listen(('0.0.0.0', 5678))
Uložte soubor a spusťte program:
python3 guessing-game.py
Volání
listen
funkce běží na pozadí a při interakci s programem čeká na příchozí připojení. V případě potřeby můžete volatwait_for_client
funkci po volánílisten
funkce, která program zablokuje, dokud ladicí program nepřipojí.
Tip
Kromě listen
funkcí a wait_for_client
funkcí poskytuje debugpy také pomocnou funkci breakpoint
. Tato funkce slouží jako programová zarážka, pokud je ladicí program připojen. Další funkce , is_client_connected1
vrátí True
, pokud je ladicí program připojen. Před voláním jiných debugpy
funkcí 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.
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.
(Volitelné) Pokud chcete mít IntelliSense pro ladění na místním počítači, nainstalujte balíček debugpy do prostředí Pythonu.
Vyberte Připojit k procesu ladění>.
V dialogovém okně Připojit k procesu nastavte typ Připojení ion na vzdálený python (debugpy).
Do pole Připojení ion Target (Cíl) 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 vzdáleného ladění.
Výběrem klávesy Enter naplníte seznam dostupných procesů ladění v tomto počítači:
Pokud se stane, že po naplnění tohoto seznamu spustíte jiný program na vzdáleném počítači, vyberte tlačítko Aktualizovat .
Vyberte proces, který chcete ladit, a vyberte Připojit, nebo poklikejte na proces.
Visual Studio se přepne do režimu ladění, zatímco skript bude dál běžet na vzdáleném počítači a poskytuje všechny obvyklé možnosti ladění .
Můžete nastavit zarážku na
if guess < number:
řádku 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.:Když zastavíte ladění, Sada Visual Studio se od aplikace odpojila. Program bude dál běžet na vzdáleném počítači. debugpy také pokračuje v naslouchání při připojování ladicíchgerů, 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 jako typ Připojení ionu vyberete vzdálený python (debugpy).
Ověřte, že tajný klíč v cíli Připojení ion přesně odpovídá tajnému kódu ve vzdáleném kódu.
Ověřte, že IP adresa v cíli Připojení ion 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í
listen
funkce, jako vdebugpy.listen((host, port))
. V takovém případě nezapomeňte otevřít konkrétní port v bráně firewall.Ověřte, že verze ladění nainstalovaná na vzdáleném počítači (vrácená
pip3 list
příkazem) odpovídá verzi sady Visual Studio Python Tools (PTVS).Následující tabulka uvádí platné páry verzí. Podle potřeby aktualizujte verzi ladění na vzdáleném počítači.
Visual Studio Nástroje Python Tools ladění 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 ladění. 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á ladicí program, ale názvy funkcí byly stejné jako názvy funkcí v ptvsd. listen
Místo , byste použili enable_attach
. wait_for_client
Místo , byste použili wait_for_attach
. breakpoint
Místo , byste 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, sada 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:
Nastavte tajný kód, který slouží k omezení přístupu ke spuštěném skriptu.
V ptvsd 3.x funkce vyžaduje,
enable_attach
abyste jako první argument předali "tajný kód".- Když připojíte vzdálený ladicí program, zadejte tajný kód pomocí
enable_attach(secret="<secret>")
příkazu.
I když můžete povolit připojení kohokoli pomocí
enable_attach(secret=None)
příkazu, tato možnost se nedoporučuje.- Když připojíte vzdálený ladicí program, zadejte tajný kód pomocí
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 vzdáleného 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:
Na vzdáleném počítači pomocí
openssl
příkazu 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
openssl
řádku zadejte název hostitele nebo IP adresu, kterou používáte pro připojení pro běžný název.
Další informace najdete v tématu Certifikáty podepsané svým držitelem v dokumentaci k modulu Pythonu
ssl
. Všimněte si, že příkaz popsaný v dokumentaci Pythonu generuje pouze jeden sloučený soubor.- Na příkazovém
V kódu upravte volání
enable_attach
funkce tak, aby zahrnovalocertfile
akeyfile
argumenty pomocí názvů souborů jako hodnot. Tyto argumenty mají stejný význam jako pro standardníssl.wrap_socket
funkci 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é.
Restartujte program Pythonu na vzdáleném počítači, aby byl připravený k ladění.
Zabezpečte kanál přidáním certifikátu do důvěryhodné kořenové certifikační autority na počítači s Windows pomocí sady Visual Studio:
Zkopírujte soubor certifikátu ze vzdáleného počítače do místního počítače.
Otevřete Ovládací panely a přejděte do části Nástroje systému>Windows Správa certifikátů počítače.
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áty a vyberte Všechny úlohy>Import.
Vyhledejte a vyberte soubor .cer zkopírovaný ze vzdáleného počítače.
Pokračujte v dialogových výzev k dokončení procesu importu.
Opakujte proces připojení v sadě Visual Studio, jak je popsáno výše v části Připojit vzdáleně z nástrojů Python Tools.
Pro tuto instanci definujte
tcps://
jako protokol pro Připojení ion Target (nebo kvalifikátor).
Ř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.
Upozornění
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í vzdálené certifikáty, které nejsou důvěryhodné .
Problém: Certifikát není správně přidaný 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 Windows a zkuste připojení zopakovat.
Visual Studio zobrazí název vzdáleného certifikátu, který neodpovídá upozornění na název 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 části Zabezpečení 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.