Megosztás a következőn keresztül:


Python-kód távoli hibakeresése Linuxon a Visual Studióban

Ebből a cikkből megtudhatja, hogyan konfigurálhatja a Visual Studio-telepítést a Python-kód távoli Linux rendszerű számítógépeken történő hibakeresésének támogatásához. Ez az útmutató a Visual Studio 2019 16.6-os verzióján alapul.

A Visual Studio helyileg és távolról is elindíthat és hibakeresést végezhet a Python-alkalmazásokban Egy Windows-számítógépen. A Visual Studio a CPythontól eltérő operációs rendszeren, eszközön vagy Python-implementáción is támogatja a távoli hibakeresést a hibakeresési kódtárhasználatával.

A Visual Studio 2019 16.4-es és korábbi verziója a ptvsd-kódtárat használja. A Visual Studio 2019 16.5-ös és újabb verzióiban a hibakeresési kódtár lecseréli a ptvsd-t. Hibakeresés használatakor a hibakeresés alatt álló Python-kód azt a hibakeresési kiszolgálót üzemelteti, amelyhez a Visual Studio csatolhat. Ehhez az üzemeltetéshez a kód egy kis módosítása szükséges a kiszolgáló importálásához és engedélyezéséhez. Előfordulhat, hogy a TCP-kapcsolatok engedélyezéséhez módosítania kell a távoli számítógépen található hálózati vagy tűzfalkonfigurációkat is.

Előfeltételek

  • A Python-számítási feladatok támogatásával telepített Visual Studio. További információ: Python-támogatás telepítése a Visual Studio.

  • Egy távoli számítógép, amelyen Python fut egy operációs rendszeren, például macOS vagy Linux rendszeren.

  • Az 5678-os port (bejövő) nyitva van a távoli számítógép tűzfalán, amely a távoli hibakeresés alapértelmezett beállítása.

Linux rendszerű számítógép beállítása

Könnyedén létrehozhat Linux rendszerű virtuális gépet az Azure-ban, és a Windows Távoli asztal használatával érheti el. A virtuális géphez készült Ubuntu kényelmes, mert a Python alapértelmezés szerint telepítve van. Ha más konfigurációval rendelkezik, tekintse meg Python-értelmezők telepítése más Python-letöltési helyeken.

A tűzfal konfigurálása

A távoli hibakeresés támogatásához a távoli számítógép tűzfalán meg kell nyitni a 5678-as bejövő portot.

Az Azure-beli virtuális gépek tűzfalszabályának létrehozásáról az alábbi cikkekben olvashat bővebben:

A szkript előkészítése hibakeresésre

Az alábbi lépéseket követve előkészíthet egy szkriptet a Python-kód linuxos hibakereséséhez.

  1. A távoli számítógépen hozzon létre egy guessing-game.py nevű Python-fájlt a következő kóddal:

    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. Telepítse a debugpy csomagot a környezetébe a pip3 install debugpy paranccsal.

    Jegyzet

    Érdemes rögzíteni a telepített hibakereső verzióját, ha a hibaelhárításhoz szüksége van rá. A hibakeresési lista az elérhető verziókat is megjeleníti.

  3. Engedélyezze a távoli hibakeresést úgy, hogy a következő kódot adja hozzá a guessing-game.py fájl elejéhez a többi kód előtt. (Bár nem szigorú követelmény, a listen függvény meghívása előtt létrejönő háttérszálak hibakeresése lehetetlen.)

    import debugpy
    debugpy.listen(('0.0.0.0', 5678))
    
  4. Mentse a fájlt, és futtassa a programot:

    python3 guessing-game.py
    

    A listen függvény hívása a háttérben fut, és várja a bejövő kapcsolatokat a program használatakor. Ha szükséges, meghívhatja a wait_for_client függvényt, miután meghívta a listen függvényt, hogy letiltsa a programot, amíg a hibakereső nem csatlakozik.

Borravaló

A listen és wait_for_client függvények mellett a debugpy segédfüggvényt is biztosít breakpoint. Ez a függvény programozott töréspontként szolgál, ha a hibakereső csatlakoztatva van. Egy másik függvény, is_client_connected1, True ad vissza, ha a hibakereső csatlakoztatva van. Nem kell ellenőriznie ezt az eredményt, mielőtt bármilyen más debugpy függvényt hív meg.

Távoli csatolás a Python-eszközökről

Az alábbi lépések bemutatják, hogyan állíthat be töréspontot a távoli folyamat leállításához.

  1. Hozzon létre egy másolatot a távoli fájlról a helyi számítógépen, és nyissa meg a Visual Studióban. Nem számít, hogy hol található a fájl, de a nevének meg kell egyeznie a távoli számítógépen található szkript nevével.

  2. (Nem kötelező) Ha azt szeretné, hogy az IntelliSense hibakeresésre legyen telepítve a helyi számítógépen, telepítse a hibakeresési csomagot a Python-környezetbe.

  3. Válassza Hibakeresés>Csatolás a folyamathozlehetőséget.

  4. A Csatolás a folyamathoz párbeszédpanelen állítsa be a Kapcsolattípus értékét a Távoli Python (debugpy)lehetőségre.

  5. A Kapcsolati cél mezőbe írja be a tcp://<ip_address>:5678parancsot.

    • tcp:// a kapcsolattípust átviteli vezérlési protokollként (TCP) adja meg.
    • <ip_address> a távoli számítógép IP-címe, amely lehet explicit cím vagy olyan név, mint myvm.cloudapp.net.
    • :5678 a távoli hibakeresési port száma.
  6. Válassza az Enter lehetőséget a számítógépen elérhető hibakeresési folyamatok listájának feltöltéséhez:

    Képernyőkép a kapcsolati cél megadásáról az elérhető hibakeresési folyamatok listájának megtekintéséhez.

    Ha a lista feltöltése után egy másik programot indít el a távoli számítógépen, válassza a Frissítés gombot.

  7. Jelölje ki a hibakeresési folyamatot, és válassza a Csatoláslehetőséget, vagy kattintson duplán a folyamatra.

  8. A Visual Studio hibakeresési módba vált, miközben a szkript továbbra is fut a távoli számítógépen, és biztosítja a szokásos hibakeresési képességeket.

    Beállíthat egy töréspontot a if guess < number: sorban, majd váltson át a távoli számítógépre, és adjon meg egy másik becslést. A Visual Studio a helyi számítógépen a töréspontnál áll meg, helyi változókat jelenít meg, és így tovább:

    Képernyőkép arról, hogy a Visual Studio hogyan szünetelteti a hibakeresést töréspont elérésekor.

  9. Ha leállítja a hibakeresést, a Visual Studio leválasztja magát a programról. A program továbbra is fut a távoli számítógépen. A debugpy továbbra is figyel a hibakeresők csatolására, így bármikor újra csatlakozhat a folyamathoz.

A kapcsolat hibaelhárítása

A kapcsolattal kapcsolatos problémák elhárításához tekintse át az alábbi pontokat.

  • Győződjön meg arról, hogy a Kapcsolattípusesetén a Távoli Python (debugpy) van kiválasztva.

  • Győződjön meg arról, hogy a kapcsolati cél pontosan egyezik a távoli kódban szereplő titkos kóddal.

  • Ellenőrizze, hogy a kapcsolati cél ip-címe megegyezik-e a távoli számítógép ip-címével.

  • Ellenőrizze, hogy a távoli számítógép távoli hibakeresési portja nyitva van-e, és a kapcsolati cél tartalmazza a port utótagját, például :5678.

    Ha másik portot szeretne használni, adja meg a listen függvény hívásának portszámát, ahogyan az debugpy.listen((host, port)). Ebben az esetben mindenképpen nyissa meg az adott portot a tűzfalon.

  • Ellenőrizze, hogy a távoli számítógépen telepített hibakeresési verzió (a pip3 list parancs által visszaadott) megegyezik-e a Visual Studio Python Tools (PTVS) verziójával.

    Az alábbi táblázat az érvényes verziópárokat sorolja fel. Szükség esetén frissítse a debugpy verzióját a távoli számítógépen.

    Visual Studio Python-eszközök debugpy
    2019 16.6 1.0.0b5 1.0.0b5
    2019 16.5 1.0.0b1 1.0.0b1

Jegyzet

A Visual Studio 2019 16.0-16.4-es verziója ptvsd-t használt, nem debugpy-t. Az ebben az útmutatóban szereplő folyamat hasonló, de a függvénynevek eltérőek. A Visual Studio 2019 16.5-ös verziója debugpy-t használ, de a függvények neve megegyezik a ptvsd-ben lévőkkel. listenhelyett enable_attachhasználna. wait_for_clienthelyett wait_for_attachhasználna. breakpointhelyett break_into_debuggerhasználna.

A ptvsd 3.x használata az örökölt hibakereséshez

A Visual Studio 2017 15.7-es és korábbi verziójában a ptvsd 3.x örökölt hibakereső az alapértelmezett hibakereső.

A Visual Studio konfigurációjától függően előfordulhat, hogy a ptvsd 3.x-et kell használnia a távoli hibakereséshez:

  • A Visual Studio 2017 15.7-es és korábbi verziója a Python 2.6-os, 3.1-es és 3.4-es verziójával vagy IronPythonnal
  • A Visual Studio 2019 16.5-ös és újabb verziója Python 2.6-os, 3.1-es és 3.4-es verzióval vagy IronPythonnal
  • Korai 4.x verziók

Ha a konfiguráció egy régebbi verziós forgatókönyvet implementál, a Visual Studio megjeleníti a hibát, Hibakereső nem támogatja ezt a Python-környezetet.

Távoli hibakeresés beállítása

Ha a ptvsd 3.x használatával szeretne felkészülni a távoli hibakeresésre, hajtsa végre a következő lépéseket:

  1. Állítsa be a titkos kódot, amely a futó szkripthez való hozzáférés korlátozására szolgál.

    A ptvsd 3.x-ben a enable_attach függvény megköveteli, hogy első argumentumként "titkos" értéket adjon át.

    • A távoli hibakereső csatolásakor adja meg a titkos kulcsot a enable_attach(secret="<secret>") paranccsal.

    Bár a enable_attach(secret=None) paranccsal bárki csatlakozhat, ez a beállítás nem ajánlott.

  2. Hozza létre a kapcsolati cél URL-címét a tcp://<secret>@<ip_address>:5678űrlapon.

    • tcp:// a kapcsolattípust TCP-ként adja meg.
    • <secret> az a sztring, amelyet a Python-kód enable_attach függvényével adunk át.
    • <ip_address> a távoli számítógép IP-címe, amely lehet explicit cím vagy olyan név, mint myvm.cloudapp.net.
    • :5678 a távoli hibakeresési port száma.

Biztonságos kapcsolat TCPS-protokollal

Alapértelmezés szerint a ptvsd 3.x távoli hibakeresési kiszolgálóhoz való csatlakozást csak a titkos kód védi, és minden adat egyszerű szövegben lesz átadva. A biztonságosabb kapcsolat érdekében a ptvsd 3.x támogatja az SSL-t a TCP protokoll biztonságos formájával, vagy TCPS.

A következő lépésekkel konfigurálhatja a ptvsd 3.x protokollt a TCPS protokoll használatára:

  1. A távoli számítógépen a openssl paranccsal hozzon létre külön fájlokat a kulcshoz és az önaláírt tanúsítványhoz:

    openssl req -new -x509 -days 365 -nodes -out cert.cer -keyout cert.key
    
    • A openssl parancssorba írja be a csatlakozáshoz használt állomásnevet vagy IP-címet a Közös névesetében.

    További információ: Önaláírt tanúsítványok a Python ssl modul dokumentációjában. Vegye figyelembe, hogy a Python-dokumentációban leírt parancs csak egyetlen kombinált fájlt hoz létre.

  2. A kódban módosítsa a enable_attach függvény hívását úgy, hogy certfile és keyfile argumentumokat tartalmazzon a fájlnevek értékként való használatával. Ezeknek az argumentumoknak ugyanaz a jelentése, mint a standard ssl.wrap_socket Python-függvénynek.

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

    Ugyanezt a módosítást a helyi számítógépen lévő kódfájlban is elvégezheti. Mivel ez a kód valójában nem fut, nem feltétlenül szükséges.

  3. Indítsa újra a Python programot a távoli számítógépen, hogy készen álljon a hibakeresésre.

  4. A csatorna biztonságossá tételéhez vegye fel a tanúsítványt a Megbízható Gyökér Hitelesítésszolgáltatók közé a Windows rendszerű számítógépen a Visual Studióval:

    1. Másolja a tanúsítványfájlt a távoli számítógépről a helyi számítógépre.

    2. Nyissa meg Vezérlőpult, és lépjen Windows-eszközök>Számítógéptanúsítványok kezeléselapra.

    3. A tanúsítvány [Tanúsítványok – helyi számítógép] párbeszédpanelen bontsa ki a Megbízható Gyökérhitelesítésszolgáltatók csomópontot, kattintson a jobb gombbal a Tanúsítványokelemre, és válassza a Minden Feladat>Importáláslehetőséget.

    4. Keresse meg és válassza ki a távoli számítógépről másolt .cer fájlt.

    5. Folytassa a párbeszédpanelen megjelenő utasításokat az importálási folyamat befejezéséhez.

  5. Ismételje meg a csatolási folyamatot a Visual Studióban, ahogy azt a Távoli csatolás a Python-eszközökrőlcímű cikkben leírtuk.

    Ebben az esetben határozza meg a tcps://-t a kapcsolati cél protokolljaként (vagy a minősítő-ként).

    Képernyőkép, amely bemutatja, hogyan adhatja meg a TCPS-t távoli hibakeresési átvitelként SSL-lel.

Kapcsolati problémák elhárítása

A csatlakozási kísérlet során a Visual Studio problémákat tapasztalhat. Tekintse át a következő forgatókönyveket, és szükség szerint hajtsa végre a megfelelő műveletet.

  • A Visual Studio figyelmeztet az SSL-en keresztüli csatlakozás lehetséges tanúsítványproblémáira.

    művelet: Figyelmen kívül hagyhatja az üzenetet, és folytathatja.

    Vigyázat

    Ne feledje, hogy bár a csatorna továbbra is titkosítva van a lehallgatás ellen, nyitott lehet a középen belüli támadásokra.

  • A Visual Studio megjeleníti a figyelmeztetést, hogy a távoli tanúsítvány nem megbízható.

    Probléma: A tanúsítvány nincs megfelelően hozzáadva a Megbízható Gyökér CA-hoz.

    Művelet: Ellenőrizze újra a lépéseket, adja hozzá a tanúsítványt a Megbízható legfelső szintű hitelesítésszolgáltatóhoz a Windows-számítógépen, majd próbálkozzon újra a kapcsolattal.

    Képernyőkép arról a figyelmeztetésről, amely szerint a távoli SSL-tanúsítvány nem megbízható.

  • A Visual Studio megjeleníti a figyelmeztetést, hogy a távoli tanúsítványnév nem egyezik a gazdagépnévvel.

    Probléma: A tanúsítvány közös neve számára nincs megadva a megfelelő állomásnév vagy IP-cím.

    Művelet: Ellenőrizze újra a lépéseket a kapcsolat TCPS segítségével történő biztonságos létrehozásához. A tanúsítvány létrehozásakor mindenképpen a megfelelő közönséges név használja, majd próbálja újra a kapcsolatot.

    Képernyőkép arról a figyelmeztetésről, amely szerint a távoli SSL-tanúsítvány nem felel meg a gazdagépnévnek.