Visual Studio'da Linux'ta Python kodunda uzaktan hata ayıklama

Bu makalede, Uzak Linux bilgisayarlarda Python kodunda hata ayıklamayı desteklemek için Visual Studio yüklemenizi yapılandırmayı öğreneceksiniz. Bu kılavuz, Visual Studio 2019 sürüm 16.6'ya dayanır.

Visual Studio, Bir Windows bilgisayarda Python uygulamalarını yerel olarak ve uzaktan başlatabilir ve hatalarını ayıklayabilir. Visual Studio, hata ayıklama kitaplığını kullanarak CPython dışında farklı bir işletim sistemi, cihaz veya Python uygulamasında uzaktan hata ayıklamayı da destekler.

Visual Studio 2019 sürüm 16.4 ve öncesi ptvsd kitaplığını kullanır. Visual Studio 2019 sürüm 16.5 ve sonraki sürümlerinde hata ayıklama kitaplığı ptvsd'nin yerini alır. Debugpy kullandığınızda, hata ayıklanan Python kodu Visual Studio'nun ekleyebileceği hata ayıklama sunucusunu barındırıyor. Bu barındırma, sunucuyu içeri aktarmak ve etkinleştirmek için kodunuzda küçük bir değişiklik yapılmasını gerektirir. TCP bağlantılarına izin vermek için uzak bilgisayardaki ağ veya güvenlik duvarı yapılandırmalarını da ayarlamanız gerekebilir.

Önkoşullar

  • Python iş yükleri desteğiyle yüklenen Visual Studio. Daha fazla bilgi için bkz . Visual Studio'da Python desteğini yükleme.

  • Mac OSX veya Linux gibi bir işletim sisteminde Python çalıştıran uzak bilgisayar.

  • Uzak bilgisayarın güvenlik duvarında 5678 numaralı bağlantı noktası (gelen) açılır ve bu, uzaktan hata ayıklama için varsayılan değerdir.

Linux bilgisayar ayarlama

Azure'da kolayca bir Linux sanal makinesi oluşturabilir ve Windows'tan Uzak Masaüstü'nü kullanarak bu makineye erişebilirsiniz. Python varsayılan olarak yüklendiğinden sanal makine için Ubuntu kullanışlıdır. Farklı bir yapılandırmanız varsa bkz . Diğer Python indirme konumları için Python yorumlayıcılarını yükleme.

Güvenlik duvarını yapılandırma

Uzaktan hata ayıklamayı desteklemek için uzak bilgisayarın güvenlik duvarında 5678 numaralı gelen bağlantı noktasının açık olması gerekir.

Azure sanal makinesi için güvenlik duvarı kuralı oluşturma hakkında ayrıntılı bilgi için aşağıdaki makalelere bakın:

Betiği hata ayıklama için hazırlama

Linux'ta Python kodunuzda hata ayıklamaya yönelik bir betik hazırlamak için bu adımları izleyin.

  1. Uzak bilgisayarda, aşağıdaki kodla guessing-game.py adlı bir Python dosyası oluşturun:

    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. debugpy komutunu kullanarak pip3 install debugpy paketi ortamınıza yükleyin.

    Not

    Sorun giderme için ihtiyacınız olması durumunda yüklü olan hata ayıklama sürümünü kaydetmek iyi bir fikirdir. Hata ayıklama listesi kullanılabilir sürümleri de gösterir.

  3. guessing-game.py dosyasının üst kısmına diğer kodlardan önce aşağıdaki kodu ekleyerek uzaktan hata ayıklamayı etkinleştirin. (Katı bir gereksinim olmasa da, işlev çağrılmadan önce oluşturulan arka plan iş parçacıklarında listen hata ayıklamak mümkün değildir.)

    import debugpy
    debugpy.listen(('0.0.0.0', 5678))
    
  4. Dosyayı kaydedin ve programı çalıştırın:

    python3 guessing-game.py
    

    İşlev çağrısı listen arka planda çalışır ve programla etkileşim kurarken gelen bağlantıları bekler. İsterseniz, hata ayıklayıcısı eklenene wait_for_client kadar programı engellemek için işlevini çağırdıktan sonra işlevini çağırabilirsiniz listen .

İpucu

ve wait_for_client işlevlerine listen ek olarak debugpy bir yardımcı işlevi breakpointde sağlar. Bu işlev, hata ayıklayıcı ekliyse programlı bir kesme noktası işlevi görür. Başka bir işlev olan is_client_connected1, hata ayıklayıcısı ekliyse döndürür True . Diğer debugpy işlevleri çağırmadan önce bu sonucu denetlemeniz gerekmez.

Python Araçları'ndan uzaktan ekleme

Aşağıdaki adımlarda, uzak işlemi durdurmak için bir kesme noktasının nasıl ayarlanacağı gösterilmektedir.

  1. Yerel bilgisayarda uzak dosyanın bir kopyasını oluşturun ve Visual Studio'da açın. Dosyanın nerede bulunduğu önemli değildir, ancak adı uzak bilgisayardaki betiğin adıyla eşleşmelidir.

  2. (İsteğe bağlı) Yerel bilgisayarınızda hata ayıklama için IntelliSense'i kullanmak için hata ayıklama paketini Python ortamınıza yükleyin.

  3. İşleme Ekleme Hatalarını Ayıkla'ya>tıklayın.

  4. İşleme Ekle iletişim kutusunda Bağlan ion Type değeriniPython uzak (debugpy) olarak ayarlayın.

  5. Bağlan ion Hedefi alanına komutunu tcp://<ip_address>:5678girin.

    • tcp:// bağlantı türünü İletim Denetimi Protokolü (TCP) olarak belirtir.
    • <ip_address>, açık bir adres veya myvm.cloudapp.net gibi bir ad olabilecek uzak bilgisayarın IP adresidir.
    • :5678 , uzaktan hata ayıklama bağlantı noktası numarasıdır.
  6. Bu bilgisayardaki kullanılabilir hata ayıklama işlemlerinin listesini doldurmak için Enter'ı seçin:

    Screenshot that shows how to enter the connection target to see a list of available debugpy processes.

    Bu listeyi doldurdıktan sonra uzak bilgisayarda başka bir program başlatırsanız Yenile düğmesini seçin.

  7. Hata ayıklama işlemini seçin ve Ekle'yi seçin veya işleme çift tıklayın.

  8. Visual Studio, betik uzak bilgisayarda çalışmaya devam ederken hata ayıklama moduna geçer ve tüm normal hata ayıklama özelliklerini sağlar.

    Satırda if guess < number: bir kesme noktası ayarlayabilir, ardından uzak bilgisayara geçip başka bir tahmin girebilirsiniz. Yerel bilgisayarınızdaki Visual Studio kesme noktasında durur, yerel değişkenleri gösterir ve bu şekilde devam eder:

    Screenshot that shows how Visual Studio pauses debugging when a breakpoint is hit.

  9. Hata ayıklamayı durdurduğunuzda Visual Studio programdan ayrılır. Program uzak bilgisayarda çalışmaya devam eder. debugpy ayrıca hata ayıklayıcıları ekleme dinlemeye devam eder, böylece istediğiniz zaman işleme yeniden iliştirebilirsiniz.

Bağlantı sorunlarını giderme

Bağlantıyla ilgili sorunları gidermeye yardımcı olması için aşağıdaki noktaları gözden geçirin.

  • Bağlan ion Türü için Python uzak (debugpy) öğesini seçtiğinizden emin olun.

  • Bağlan ion Hedefindeki gizli dizinin uzak koddaki gizli diziyle tam olarak eşleşir olduğunu onaylayın.

  • Bağlan ion Hedefindeki IP adresinin uzak bilgisayarın ip adresiyle eşleşdiğini onaylayın.

  • Uzak bilgisayardaki uzaktan hata ayıklama bağlantı noktasının açık olduğunu ve bağlantı hedefinin gibi :5678bağlantı noktası son ekini içerdiğini doğrulayın.

    Farklı bir bağlantı noktası kullanmak için, işlevine listen yapılan çağrıda olduğu gibi debugpy.listen((host, port))bağlantı noktası numarasını belirtin. Bu durumda, güvenlik duvarında belirli bir bağlantı noktasını açtığınızdan emin olun.

  • Uzak bilgisayarda yüklü hata ayıklama sürümünün (komut tarafından pip3 list döndürülen) Visual Studio Python Araçları (PTVS) sürümüyle eşleşip eşleşmediği onaylayın.

    Aşağıdaki tabloda geçerli sürüm çiftleri listelemektedir. Gerekirse, uzak bilgisayardaki debugpy sürümünü güncelleştirin.

    Visual Studio Python Araçları hata ayıklama
    2019 16.6 1.0.0b5 1.0.0b5
    2019 16.5 1.0.0b1 1.0.0b1

Not

Visual Studio 2019 sürüm 16.0-16.4 hata ayıklama değil ptvsd kullandı. Bu sürümler için bu kılavuzdaki işlem benzerdir, ancak işlev adları farklıdır. Visual Studio 2019 sürüm 16.5 hata ayıklama kullanır, ancak işlev adları ptvsd'deki adlarla aynıdır. listenyerine kullanabilirsinizenable_attach. wait_for_clientyerine kullanabilirsinizwait_for_attach. breakpointyerine kullanabilirsinizbreak_into_debugger.

Eski hata ayıklama için ptvsd 3.x kullanma

ptvsd 3.x eski hata ayıklayıcısı, Visual Studio 2017 sürüm 15.7 ve önceki sürümlerde varsayılandır.

Visual Studio yapılandırmanıza bağlı olarak, uzaktan hata ayıklama için ptvsd 3.x kullanmanız gerekebilir:

  • Python 2.6, 3.1 - 3.4 veya IronPython ile Visual Studio 2017 sürüm 15.7 ve öncesi
  • Python 2.6, 3.1 - 3.4 veya IronPython ile Visual Studio 2019 sürüm 16.5 ve üzeri
  • 4.x'in ilk sürümleri

Yapılandırmanız daha eski bir sürüm senaryosu uyguluyorsa, Visual Studio hatasını gösterir; Hata Ayıklayıcı bu Python ortamını desteklemiyordur.

Uzaktan hata ayıklamayı ayarlama

ptvsd 3.x ile uzaktan hata ayıklamaya hazırlanmak için aşağıdaki adımları tamamlayın:

  1. Çalışan betik erişimini kısıtlamak için kullanılan gizli dizinizi ayarlayın.

    ptvsd 3.x'te enable_attach işlev, ilk bağımsız değişken olarak bir "gizli dizi" geçirmenizi gerektirir.

    • Uzak hata ayıklayıcısını eklerken komutunu kullanarak gizli diziyi enable_attach(secret="<secret>") girin.

    Komutu kullanarak enable_attach(secret=None) herkesin bağlanmasına izin vererek bu seçenek önerilmez.

  2. biçiminde tcp://<secret>@<ip_address>:5678bağlantı hedefi URL'nizi oluşturun.

    • tcp:// bağlantı türünü TCP olarak belirtir.
    • <secret> , Python kodunda enable_attach işleviyle geçirilen dizedir.
    • <ip_address>, açık bir adres veya myvm.cloudapp.net gibi bir ad olabilecek uzak bilgisayarın IP adresidir.
    • :5678 , uzaktan hata ayıklama bağlantı noktası numarasıdır.

TCPS protokolü ile güvenli bağlantı

Varsayılan olarak, ptvsd 3.x uzaktan hata ayıklama sunucusuna bağlantı yalnızca gizli diziyle korunur ve tüm veriler düz metin olarak geçirilir. Daha güvenli bir bağlantı için ptvsd 3.x, TCP protokolünün veya TCPS'nin güvenli biçimini kullanarak SSL'yi destekler.

ptvsd 3.x'i TCPS protokolüyle çalışacak şekilde yapılandırmak için aşağıdaki adımları kullanın:

  1. Uzak bilgisayarda komutunu kullanarak openssl anahtar ve otomatik olarak imzalanan sertifika için ayrı dosyalar oluşturun:

    openssl req -new -x509 -days 365 -nodes -out cert.cer -keyout cert.key
    
    • openssl İstemde, Ortak Ad için bağlanmak için kullandığınız ana bilgisayar adını veya IP adresini girin.

    Daha fazla bilgi için Python ssl modülü belgelerindeki Otomatik olarak imzalanan sertifikalar bölümüne bakın. Python belgelerinde açıklanan komutun yalnızca tek bir birleşik dosya oluşturduğunu unutmayın.

  2. Kodda, değer olarak dosya adlarını kullanarak işlev çağrısını enable_attach ve keyfile bağımsız değişkenlerini içerecek certfile şekilde değiştirin. Bu bağımsız değişkenler, standart ssl.wrap_socket Python işleviyle aynı anlama sahiptir.

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

    Yerel bilgisayardaki kod dosyasında da aynı değişikliği yapabilirsiniz. Bu kod aslında çalıştırıldığından, kesinlikle gerekli değildir.

  3. Hata ayıklamaya hazır olması için uzak bilgisayarda Python programını yeniden başlatın.

  4. Visual Studio ile Windows bilgisayarındaki Güvenilen Kök CA'ya sertifika ekleyerek kanalın güvenliğini sağlayın:

    1. Sertifika dosyasını uzak bilgisayardan yerel bilgisayara kopyalayın.

    2. Denetim Masası açın ve Windows Araçları>Bilgisayar sertifikalarını yönet'e gidin.

    3. certlm [Sertifikalar - yerel bilgisayar] iletişim kutusunda Güvenilen Kök Sertifika Yetkilileri düğümünü genişletin, Sertifikalar'a sağ tıklayın ve Tüm Görevleri>İçeri Aktar'ı seçin.

    4. Uzak bilgisayardan kopyalanan .cer dosyasına gidin ve dosyayı seçin.

    5. İçeri aktarma işlemini tamamlamak için iletişim kutusu istemleri aracılığıyla devam edin.

  5. Daha önce Python Araçları'ndan uzaktan ekleme bölümünde açıklandığı gibi Visual Studio'da ekleme işlemini yineleyin.

    Bu örnekte, Bağlan ion Hedefi (veya Niteleyici) için protokol olarak tanımlayıntcps://.

    Screenshot that shows how to specify TCPS as the remote debugging transport with SSL.

Bağlantı sorunlarını giderme

Bağlantı girişimi sırasında Visual Studio sorunlarla karşılaşabilir. Aşağıdaki senaryoları gözden geçirin ve gerektiği gibi uygun eylemi gerçekleştirin.

  • Visual Studio, SSL üzerinden bağlanırken karşılaşılan olası sertifika sorunları hakkında uyarır.

    Eylem: İletiyi yoksayabilir ve devam edebilirsiniz.

    Dikkat

    Kanalın gizlice dinlemeye karşı şifrelenmiş olmasına rağmen ortadaki adam saldırılarına açık olabileceğini unutmayın.

  • Visual Studio uzak sertifika güvenilir değil uyarısını görüntüler.

    Sorun: Sertifika Güvenilen Kök CA'ya düzgün eklenmemiş.

    Eylem: Sertifikayı Windows bilgisayarda Güvenilen Kök CA'ya ekleme adımlarını yeniden denetleyin ve bağlantıyı yeniden deneyin.

    Screenshot of the warning that says the remote SSL certificate isn't trusted.

  • Visual Studio uzak sertifika adı ana bilgisayar adı uyarısıyla eşleşmiyor değerini görüntüler.

    Sorun: Sertifikanın Ortak Adı için doğru ana bilgisayar adı veya IP adresi belirtilmemiş.

    Eylem: TCPS ile bağlantının güvenliğini sağlama altındaki adımları yeniden denetleyin. Sertifikayı oluştururken doğru Ortak Adı kullandığınızdan emin olun ve bağlantıyı yeniden deneyin.

    Screenshot of the warning that says the remote SSL certificate doesn't match the hostname.