Bagikan melalui


Debug kode Python dari jarak jauh di Linux di Visual Studio

Dalam artikel ini, Anda menjelajahi cara mengonfigurasi penginstalan Visual Studio untuk mendukung penelusuran kesalahan kode Python di komputer Linux jarak jauh. Panduan ini didasarkan pada Visual Studio 2019 versi 16.6.

Visual Studio dapat meluncurkan dan men-debug aplikasi Python secara lokal dan jarak jauh di komputer Windows. Visual Studio juga mendukung penelusuran kesalahan dari jarak jauh pada sistem operasi, perangkat, atau implementasi Python yang berbeda selain CPython dengan menggunakan pustaka debugpy.

Visual Studio 2019 versi 16.4 dan yang lebih lama menggunakan pustaka ptvsd. Di Visual Studio 2019 versi 16.5 dan yang lebih baru, pustaka debugpy menggantikan ptvsd. Saat Anda menggunakan debugpy, kode Python yang di-debug menghosting server debug yang dapat dilampirkan Visual Studio. Hosting ini memerlukan modifikasi kecil pada kode Anda untuk mengimpor dan mengaktifkan server. Anda mungkin juga perlu menyesuaikan konfigurasi jaringan atau firewall pada komputer jarak jauh untuk mengizinkan koneksi TCP.

Prasyarat

  • Visual Studio diinstal dengan dukungan untuk beban kerja Python. Untuk informasi selengkapnya, lihat Menginstal dukungan Python di Visual Studio.

  • Komputer jarak jauh yang menjalankan Python pada sistem operasi seperti Mac OSX atau Linux.

  • Port 5678 (masuk) terbuka pada firewall komputer jarak jauh, yang merupakan default untuk penelusuran kesalahan jarak jauh.

Menyiapkan komputer Linux

Anda dapat dengan mudah membuat komputer virtual Linux di Azure dan mengaksesnya dengan menggunakan Desktop Jauh dari Windows. Ubuntu untuk komputer virtual nyaman karena Python diinstal secara default. Jika Anda memiliki konfigurasi yang berbeda, lihat Menginstal interpreter Python untuk lokasi unduhan Python lainnya.

Mengonfigurasi firewall

Port masuk 5678 harus terbuka pada firewall komputer jarak jauh untuk mendukung penelusuran kesalahan jarak jauh.

Untuk detail tentang cara membuat aturan firewall untuk komputer virtual Azure, lihat artikel berikut ini:

Menyiapkan skrip untuk penelusuran kesalahan

Ikuti langkah-langkah ini untuk menyiapkan skrip untuk menelusuri kesalahan kode Python Anda di Linux.

  1. Di komputer jarak jauh, buat file Python bernama guessing-game.py dengan kode berikut:

    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. Instal paket ke debugpy lingkungan Anda dengan menggunakan pip3 install debugpy perintah .

    Catatan

    Sebaiknya rekam versi debugpy yang diinstal jika Anda membutuhkannya untuk pemecahan masalah. Daftar debugpy juga menampilkan versi yang tersedia.

  3. Aktifkan penelusuran kesalahan jarak jauh dengan menambahkan kode berikut di bagian atas file guessing-game.py sebelum kode lain. (Meskipun bukan persyaratan yang ketat, tidak mungkin untuk men-debug utas latar belakang apa pun yang diluncurkan sebelum fungsi listen dipanggil.)

    import debugpy
    debugpy.listen(('0.0.0.0', 5678))
    
  4. Simpan file dan jalankan program:

    python3 guessing-game.py
    

    Panggilan ke listen fungsi berjalan di latar belakang dan menunggu koneksi masuk saat Anda berinteraksi dengan program. Jika diinginkan, Anda dapat memanggil wait_for_client fungsi setelah memanggil listen fungsi untuk memblokir program hingga debugger terpasang.

Tip

Selain listen fungsi dan wait_for_client , debugpy juga menyediakan fungsi breakpointpembantu . Fungsi ini berfungsi sebagai titik henti terprogram jika debugger dilampirkan. Fungsi lain, is_client_connected1, mengembalikan True jika debugger dilampirkan. Anda tidak perlu memeriksa hasil ini sebelum memanggil fungsi lain debugpy .

Melampirkan secara jarak jauh dari Python Tools

Langkah-langkah berikut menunjukkan cara mengatur titik henti untuk menghentikan proses jarak jauh.

  1. Buat salinan file jarak jauh di komputer lokal dan buka di Visual Studio. Tidak masalah di mana file tersebut berada, tetapi namanya harus cocok dengan nama skrip di komputer jarak jauh.

  2. (Opsional) Agar IntelliSense debugpy di komputer lokal Anda, instal paket debugpy ke lingkungan Python Anda.

  3. Pilih Debug>Lampirkan ke Proses.

  4. Dalam dialog Lampirkan ke Proses, atur Jenis Koneksi ion ke jarak jauh Python (debugpy).

  5. Di bidang Target Koneksi ion, masukkan perintah tcp://<ip_address>:5678.

    • tcp:// menentukan jenis koneksi sebagai Protokol Kontrol Transmisi (TCP).
    • <ip_address> adalah alamat IP komputer jarak jauh, yang dapat menjadi alamat eksplisit atau nama seperti myvm.cloudapp.net.
    • :5678 adalah nomor port penelusuran kesalahan jarak jauh.
  6. Pilih Enter untuk mengisi daftar proses debugpy yang tersedia di komputer tersebut:

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

    Jika Anda memulai program lain pada komputer jarak jauh setelah mengisi daftar ini, pilih tombol Refresh.

  7. Pilih proses untuk men-debug dan pilih Lampirkan, atau klik dua kali proses.

  8. Visual Studio beralih ke mode penelusuran kesalahan saat skrip terus berjalan di komputer jarak jauh, menyediakan semua kemampuan penelusuran kesalahan yang biasa.

    Anda dapat mengatur titik henti pada if guess < number: baris, lalu beralih ke komputer jarak jauh dan memasukkan tebakan lain. Visual Studio di komputer lokal Anda berhenti di titik henti, menampilkan variabel lokal, dan sebagainya:

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

  9. Saat Anda berhenti men-debug, Visual Studio melepaskan dari program. Program terus berjalan pada komputer jarak jauh. debugpy juga terus mendengarkan untuk melampirkan debugger, sehingga Anda dapat memasang kembali ke proses lagi kapan saja.

Memecahkan masalah koneksi

Tinjau poin-poin berikut untuk membantu memecahkan masalah dengan koneksi.

  • Pastikan Anda memilih Python remote (debugpy) untuk Jenis Koneksi ion.

  • Konfirmasikan rahasia dalam Target Koneksi ion sama persis dengan rahasia dalam kode jarak jauh.

  • Konfirmasi alamat IP di Target Koneksi ion cocok dengan komputer jarak jauh.

  • Verifikasi port penelusuran kesalahan jarak jauh pada komputer jarak jauh terbuka, dan target koneksi menyertakan akhiran port, seperti :5678.

    Untuk menggunakan port yang berbeda, tentukan nomor port dalam panggilan ke listen fungsi, seperti dalam debugpy.listen((host, port)). Dalam hal ini, pastikan untuk membuka port tertentu di firewall.

  • Konfirmasikan versi debugpy yang diinstal pada komputer jarak jauh (sebagaimana dikembalikan oleh perintah) cocok dengan pip3 list versi Visual Studio Python Tools (PTVS).

    Tabel berikut mencantumkan pasangan versi yang valid. Jika perlu, perbarui versi debugpy di komputer jarak jauh.

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

Catatan

Visual Studio 2019 versi 16.0-16.4 menggunakan ptvsd, bukan debugpy. Proses dalam panduan ini untuk versi tersebut serupa, tetapi nama fungsinya berbeda. Visual Studio 2019 versi 16.5 menggunakan debugpy, tetapi nama fungsinya sama dengan yang ada di ptvsd. Alih-alih listen, Anda akan menggunakan enable_attach. Alih-alih wait_for_client, Anda akan menggunakan wait_for_attach. Alih-alih breakpoint, Anda akan menggunakan break_into_debugger.

Gunakan ptvsd 3.x untuk penelusuran kesalahan warisan

Debugger warisan ptvsd 3.x adalah default di Visual Studio 2017 versi 15.7 dan yang lebih lama.

Bergantung pada konfigurasi Visual Studio, Anda mungkin perlu menggunakan ptvsd 3.x untuk penelusuran kesalahan jarak jauh:

  • Visual Studio 2017 versi 15.7 dan yang lebih lama dengan Python 2.6, 3.1 hingga 3.4, atau IronPython
  • Visual Studio 2019 versi 16.5 dan yang lebih baru dengan Python 2.6, 3.1 hingga 3.4, atau IronPython
  • Versi 4.x awal

Jika konfigurasi Anda menerapkan skenario versi yang lebih lama, Visual Studio menampilkan kesalahan, Debugger tidak mendukung lingkungan Python ini.

Menyiapkan penelusuran kesalahan jarak jauh

Untuk mempersiapkan penelusuran kesalahan jarak jauh dengan ptvsd 3.x, selesaikan langkah-langkah berikut:

  1. Siapkan rahasia Anda, yang digunakan untuk membatasi akses ke skrip yang sedang berjalan.

    Dalam ptvsd 3.x, enable_attach fungsi mengharuskan Anda untuk meneruskan "rahasia" sebagai argumen pertama.

    • Saat Anda melampirkan debugger jarak jauh, masukkan rahasia dengan enable_attach(secret="<secret>") perintah .

    Meskipun Anda dapat mengizinkan siapa pun untuk terhubung dengan menggunakan enable_attach(secret=None) perintah , opsi ini tidak disarankan.

  2. Buat URL target koneksi Anda dalam formulir tcp://<secret>@<ip_address>:5678.

    • tcp:// menentukan jenis koneksi sebagai TCP.
    • <secret> adalah string yang diteruskan dengan enable_attach fungsi dalam kode Python.
    • <ip_address> adalah alamat IP komputer jarak jauh, yang dapat menjadi alamat eksplisit atau nama seperti myvm.cloudapp.net.
    • :5678 adalah nomor port penelusuran kesalahan jarak jauh.

Mengamankan koneksi dengan protokol TCPS

Secara default, koneksi ke server debug jarak jauh ptvsd 3.x diamankan oleh rahasia saja, dan semua data diteruskan dalam teks biasa. Untuk koneksi yang lebih aman, ptvsd 3.x mendukung SSL dengan menggunakan bentuk aman protokol TCP, atau TCPS.

Gunakan langkah-langkah berikut untuk mengonfigurasi ptvsd 3.x agar berfungsi dengan protokol TCPS:

  1. Di komputer jarak jauh, gunakan openssl perintah untuk menghasilkan file terpisah untuk kunci dan sertifikat yang ditandatangani sendiri:

    openssl req -new -x509 -days 365 -nodes -out cert.cer -keyout cert.key
    
    • openssl Pada perintah, masukkan nama host atau alamat IP yang Anda gunakan untuk menyambungkan untuk Nama Umum.

    Untuk informasi selengkapnya, lihat Sertifikat yang ditandatangani sendiri dalam dokumentasi modul Python ssl . Perhatikan bahwa perintah yang dijelaskan dalam dokumentasi Python hanya menghasilkan satu file gabungan.

  2. Dalam kode, ubah panggilan ke enable_attach fungsi untuk menyertakan certfile dan keyfile argumen dengan menggunakan nama file sebagai nilai. Argumen ini memiliki arti yang sama seperti untuk fungsi Python standar ssl.wrap_socket .

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

    Anda juga dapat membuat perubahan yang sama dalam file kode di komputer lokal. Karena kode ini tidak benar-benar dijalankan, kode ini tidak benar-benar diperlukan.

  3. Mulai ulang program Python di komputer jarak jauh sehingga siap untuk penelusuran kesalahan.

  4. Amankan saluran dengan menambahkan sertifikat ke CA Akar Tepercaya di komputer Windows dengan Visual Studio:

    1. Salin file sertifikat dari komputer jarak jauh ke komputer lokal.

    2. Buka Panel Kontrol dan buka Alat>Windows Kelola sertifikat komputer.

    3. Dalam dialog certlm [Sertifikat - komputer lokal], perluas simpul Otoritas Sertifikasi Akar Tepercaya, klik kanan Sertifikat, dan pilih Impor Semua Tugas>.

    4. Telusuri dan pilih file .cer yang disalin dari komputer jarak jauh.

    5. Lanjutkan melalui perintah dialog untuk menyelesaikan proses impor.

  5. Ulangi proses lampirkan di Visual Studio, seperti yang dijelaskan sebelumnya di Lampirkan dari jarak jauh dari Python Tools.

    Untuk instans ini, tentukan tcps:// sebagai protokol untuk Target Koneksi ion (atau Kualifikasi).

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

Mengatasi masalah koneksi

Selama upaya koneksi, Visual Studio mungkin mengalami masalah. Tinjau skenario berikut dan ambil tindakan yang sesuai, sesuai kebutuhan.

  • Visual Studio memperingatkan tentang potensi masalah sertifikat saat menyambungkan melalui SSL.

    Tindakan: Anda dapat mengabaikan pesan dan melanjutkan.

    Perhatian

    Perlu diingat bahwa meskipun saluran masih dienkripsi terhadap penyadapan, saluran tersebut dapat terbuka untuk serangan man-in-the-middle.

  • Visual Studio menampilkan sertifikat jarak jauh bukan peringatan tepercaya .

    Masalah: Sertifikat tidak ditambahkan dengan benar ke CA Akar Tepercaya.

    Tindakan: Centang ulang langkah-langkah untuk menambahkan sertifikat ke CA Akar Tepercaya di komputer Windows, dan coba koneksi lagi.

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

  • Visual Studio menampilkan nama sertifikat jarak jauh tidak cocok dengan peringatan nama host.

    Masalah: Nama host atau alamat IP yang tepat tidak ditentukan untuk Nama Umum untuk sertifikat.

    Tindakan: Centang ulang langkah-langkah dalam Mengamankan koneksi dengan TCPS. Pastikan untuk menggunakan Nama Umum yang benar saat Anda membuat sertifikat, dan coba koneksi lagi.

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