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 versi sebelumnya 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 sedang di-debug akan menghosting server debug yang dapat dihubungkan oleh 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 macOS atau Linux.

  • Port masuk 5678 terbuka pada firewall komputer jarak jauh, yang merupakan default untuk debugging 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.

Konfigurasi firewall

Port masuk 5678 harus terbuka pada firewall komputer jarak jauh untuk mendukung debugging 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 men-debug 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 debugpy ke lingkungan Anda dengan menggunakan perintah pip3 install debugpy.

    Nota

    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 muncul 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 fungsi listen berjalan di latar belakang dan menunggu koneksi masuk saat Anda berinteraksi dengan program. Jika diinginkan, Anda dapat memanggil fungsi wait_for_client setelah memanggil fungsi listen untuk memblokir program hingga debugger terpasang.

Tips

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

Lampirkan dari 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 berada, tetapi namanya harus cocok dengan nama skrip di komputer jarak jauh.

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

  3. Pilih Debug>Lampirkan ke Proses.

  4. Dalam dialog Lampirkan ke Proses, atur Jenis Koneksi ke Python remote (debugpy).

  5. Di bidang Target Koneksi, 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 debugging jarak jauh.
  6. Pilih Masukkan untuk mengisi daftar proses debugpy yang tersedia di komputer tersebut:

    Cuplikan layar yang memperlihatkan cara memasukkan target koneksi untuk melihat daftar proses debugpy yang tersedia.

    Jika Anda kebetulan 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 baris if guess < number:, 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:

    Cuplikan layar yang memperlihatkan bagaimana Visual Studio menjeda debugging saat titik henti ditemui.

  9. Saat Anda berhenti men-debug, Visual Studio memutuskan sambungan dari program. Program terus berjalan pada komputer jarak jauh. debugpy juga terus siap menerima debugger yang dihubungkan, sehingga Anda dapat menghubungkan kembali ke proses tersebut kapan saja.

Memecahkan masalah koneksi

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

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

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

  • Pastikan alamat IP di Target Koneksi sesuai dengan komputer jarak jauh.

  • Verifikasi bahwa port debugging jarak jauh terbuka pada komputer jarak jauh, dan target koneksi menyertakan sufiks port, seperti :5678.

    Untuk menggunakan port yang berbeda, tentukan nomor port dalam panggilan ke fungsi listen, 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 pip3 list) cocok dengan 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

Nota

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 lama

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 debugging jarak jauh

Untuk mempersiapkan pemecahan masalah program 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, fungsi enable_attach mengharuskan pengiriman "kunci rahasia" sebagai argumen pertama.

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

    Meskipun Anda dapat mengizinkan siapa pun untuk terhubung dengan menggunakan perintah enable_attach(secret=None), 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 fungsi enable_attach 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 debugging jarak jauh.

Mengamankan koneksi dengan protokol TCPS

Secara default, koneksi ke server debug jarak jauh ptvsd 3.x hanya dilindungi oleh kata sandi, dan semua data dikirimkan 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 perintah openssl untuk menghasilkan file terpisah untuk kunci dan sertifikat yang ditandatangani sendiri:

    openssl req -new -x509 -days 365 -nodes -out cert.cer -keyout cert.key
    
    • Pada perintah openssl, masukkan nama host atau alamat IP yang Anda gunakan untuk menyambungkan ke 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 fungsi enable_attach untuk menyertakan argumen certfile dan keyfile dengan menggunakan nama file sebagai nilai. Argumen ini memiliki arti yang sama seperti untuk fungsi Python ssl.wrap_socket standar.

    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 debugging.

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

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

    2. Buka Panel Kontrol dan buka Windows Tools>Mengelola sertifikat komputer.

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

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

    5. Lanjutkan melalui perintah dialog untuk menyelesaikan proses impor.

  5. Ulangi proses lampiran 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 (atau Pengualifikasi ).

    Cuplikan layar yang menunjukkan cara menentukan TCPS sebagai transport debugging jarak jauh dengan 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.

    Peringatan

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

  • Visual Studio menampilkan peringatan sertifikat jarak jauh tidak tepercaya.

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

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

    Cuplikan layar peringatan yang mengatakan sertifikat SSL jarak jauh tidak tepercaya.

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

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

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

    Cuplikan layar peringatan yang mengatakan sertifikat SSL jarak jauh tidak cocok dengan nama host.