Kode bisa mengikuti aturan bahasa tetapi menghitung hasil yang berbeda dari maksudmu. Debugger memungkinkanmu menghentikan eksekusi, melihat variabel, dan mengikuti pernyataan satu per satu.

Bab ini memeriksa jarak harga penutupan dari moving average lima candle. Kamu memperkirakan hasil terlebih dahulu, lalu melihat hasil perhitungan program.

Tiga jenis kesalahan

Kesalahan sintaks melanggar aturan penulisan kode, misalnya titik dua yang hilang atau indentasi salah. Editor sering menandainya saat kamu mengetik.

Kesalahan runtime muncul ketika program dijalankan. Misalnya, kamu membaca indeks array yang tidak memiliki elemen. Eksekusi bisa berhenti dengan pesan kesalahan.

Kesalahan logika masih memungkinkan program selesai. Jika kode berisi average - close sebagai pengganti close - average, tanda hasil berbalik. Aturan bahasa mengizinkannya, sehingga kamu harus membandingkan hasil dengan tugas yang dimaksud.

Tampilan View → Problems di Visual Studio Code menampilkan masalah yang ditandai editor. Klik salah satu baris untuk menuju lokasi bermasalah. Baca pesan kesalahan lengkap sebelum mulai mengubah banyak baris.

Program yang bisa diperiksa

Buat file debug_average.py:

"""
@pyne edge
"""
from pynecore import Series
from pynecore.lib import bar_index, close, color, log, plot, script, ta


@script.indicator("Average Distance", overlay=False)
def main():
    average: Series[float] = ta.sma(close, 5)
    gap = close - average
    if bar_index == 10:
        log.info("close={0}, average={1}, gap={2}", close, average, gap)
    plot(gap, "Distance", color=color.blue)

bar_index adalah nomor urut candle yang sedang diproses, dimulai dari nol. Indeks 10 berarti candle kesebelas. Karena itu, pemanggilan log hanya menulis sekali dalam eksekusi historis ini.

log.info membuat pesan berformat. {0}, {1}, dan {2} diganti oleh tiga nilai setelahnya, dalam urutan tersebut. Teks dengan tempat bernomor ini diproses oleh pencatat log.

Jalankan program sekali melalui Run Pyne code. Garis harus positif ketika harga penutupan di atas rata-rata. Pada empat candle pertama, rata-rata dan jarak belum tersedia.

Berhenti sebelum baris tertentu

  1. Klik di sebelah kiri nomor baris plot(gap, ...). Tanda breakpoint muncul.
  2. Klik Debug di atas kode.
  3. Jika pemilih data muncul, pilih baris demo.
  4. Program berhenti pada breakpoint. Buka tampilan Run and Debug.

Breakpoint adalah tempat debugger menghentikan program. Baris yang disorot belum dijalankan. Hasil penugasan sebelum baris tersebut sudah bisa diperiksa.

Perhentian pertama mungkin berada pada candle pertama. Di sana, gap belum tersedia karena jendela lima candle belum lengkap. Debugger menunjukkan keadaan tersebut; nilai yang belum tersedia ini sendiri bukan kesalahan program.

Menuju candle setelah pemanasan

Pada bilah alat mengambang saat debugging, tombol Next Bar PyneIDE menuju candle berikutnya. Nama ikon terlihat saat penunjuk mouse diarahkan ke atasnya. Cari tombol Run to Bar…, klik, lalu masukkan 10 pada kolom yang muncul dan tekan Enter.

Pada candle kesebelas, jendela rata-rata lima sudah lengkap. Cari variabel average dan gap dalam daftar Variables. Kelompok Pyne memungkinkanmu memeriksa data candle yang diproses, termasuk bar_index dan close.

debug_average.py berhenti pada breakpoint di PyneIDE; tampilan Run and Debug memperlihatkan variabel dan data candle Pyne.
Saat eksekusi dihentikan debugger, nilai candle dan variabel buatanmu bisa diperiksa bersama.

average adalah variabel Series, sehingga kode program juga bisa menggunakan nilai sebelumnya melalui average[1]. Rata-rata candle sebelumnya belum tentu sama dengan saat ini karena jendelanya sudah bergeser satu candle.

Ekspresi yang dipantau

Pada bagian Watch, tambahkan ekspresi yang ingin kamu lihat setiap kali eksekusi berhenti. Coba:

close
close[1]
average
close - average

close[1] adalah harga penutupan sebelum candle yang dihentikan. average adalah variabel buatanmu. Hasil close - average harus sama dengan gap yang sudah dihitung.

Pantau variabel dan perhitungan sederhana. Jangan memasukkan pemanggilan ta.sma, tindakan pengiriman order, atau pemanggilan yang mengubah array ke Watch. Pemeriksaan debugging tidak boleh mengubah status program.

Per baris dan per candle

Step Over beralih ke pernyataan berikutnya tanpa masuk ke rincian fungsi yang dipanggil. Step Into bisa masuk ke fungsi buatanmu. Continue melanjutkan eksekusi hingga perhentian berikutnya. Disconnect memutus hubungan debugger dan mengakhiri debugging.

Next Bar menggunakan langkah berbeda: berpindah ke candle berikutnya. Langkah per baris memperlihatkan rincian perhitungan satu candle; langkah per candle menunjukkan perubahan hasil seiring waktu.

Candle yang dihentikan belum selesai diproses, sehingga grafik mungkin menunjukkan keadaan yang sudah selesai sebelumnya. Periksa indeks dan data candle saat ini dalam kelompok Pyne.

Sebelum membaca variabel, lihat baris yang disorot. Jika penugasannya belum dilakukan, variabel belum berisi hasil yang sedang kamu harapkan.

Menemukan kesalahan tanda

Hentikan debugger. Ubah baris ini:

gap = average - close

Mulai debugging kembali dan menuju candle yang sama. Jika harga berada di atas rata-rata, gap akan negatif, padahal tugasnya meminta jarak positif.

Di Watch, close - average tetap menunjukkan arah asli yang diinginkan. Perbandingan kedua nilai langsung memperlihatkan perbedaannya. Kembalikan pengurangan yang benar dan periksa lagi candle yang sama.

Coba sendiri

Tambahkan variabel previous_close = close[1] ke program dan periksa dalam debugger. Pada indeks candle 10, harga penutupan dari indeks berapa yang seharusnya disimpan? Apa nilainya pada candle pertama?

Solusi latihan
previous_close = close[1]

Pada candle 10, nilainya adalah harga penutupan candle 9. Pada candle pertama berindeks 0, nilainya tidak tersedia karena file data tidak memiliki candle sebelumnya.

Letakkan baris sebelum breakpoint agar sudah dijalankan saat program berhenti. Setelah pemeriksaan, variabel bantu dan baris log yang hanya digunakan untuk memeriksa bisa dihapus.

Deskripsi masalah yang jelas

Saat meminta bantuan, sertakan file, data yang digunakan, input sebenarnya, dan waktu candle yang diperiksa. Jelaskan nilai yang diharapkan dan yang diperoleh. Sebagai pengganti “garisnya salah”, misalnya: “pada candle ini harga penutupan 101, rata-rata 100, tetapi jaraknya −1”. Dengan informasi ini, perhitungan bisa diperiksa.