Lewati ke isi

Debugging

Apa itu debugging

Debugging adalah proses di mana Anda dapat mendeteksi dan memperbaiki kesalahan yang ada dalam kode Anda.

Program .NET apa pun dapat berjalan dalam dua mode berbeda.

  • Mode rilis - biasanya digunakan dalam lingkungan produksi. Saat menggunakannya, .NET mengaktifkan berbagai optimasi compiler dan just-in-time yang meningkatkan kecepatan eksekusi kode Anda dan mengurangi penggunaan memori.
  • Mode debug - terutama digunakan dalam lingkungan pengembangan dan pengujian. Semua optimasi dinonaktifkan, dan Anda dapat melampirkan debugger .NET ke kode Anda.

Saat bekerja dengan pustaka dan aplikasi .NET, debugging melibatkan hal-hal berikut:

  • Menjalankan kode Anda dalam mode debug
  • Melampirkan debugger .NET ke kode Anda
  • Mengatur titik henti kode untuk menunjukkan apakah alur eksekusi harus dijeda
  • Mengikuti alur eksekusi kode dengan jeda yang direncanakan pada titik henti

Definisi debugger .NET

Debugger .NET adalah program yang menggunakan API runtime. API ini, pada gilirannya, memungkinkan untuk mengontrol alur eksekusi proses .NET. Dengan kata lain, mereka dapat menjeda eksekusi pada titik henti tertentu dan menyimpan berbagai keadaan (termasuk nilai yang dipegang oleh variabel individual selama keadaan tersebut).

Membangun algo dalam mode debug

Seperti yang telah kita bahas di atas, men-debug cBot atau indikator melibatkan pembangunan ekstensi ini dalam mode debug. Secara default, ketika Anda mengklik tombol Bangun di UI cTrader, ekstensi Anda berjalan dalam mode rilis untuk mengaktifkan optimasi kode.

Untuk membangun cBot atau indikator Anda dalam mode debug, Anda perlu menggunakan CLI .NET atau IDE eksternal seperti Visual Studio. Dalam dokumentasi ini, kami menunjukkan proses debug seperti yang terjadi di Visual Studio. Namun, proses ini juga dapat direplikasi di IDE lain dengan sedikit perubahan.

Instal versi terbaru Visual Studio di mesin Anda dan lakukan tindakan berikut:

  • Buka indikator atau cBot Anda di Visual Studio dengan memilih opsi Edit di Visual Studio di dropdown Edit di... di bagian atas jendela editor kode.

  • Di menu di atas editor kode Visual Studio, pilih Debug.

Image title

  • Bangun cBot atau indikator Anda dalam mode debug.

Men-debug cBot atau indikator

Sekarang Anda tahu cara membangun cBot atau indikator dalam mode debug, kita akan fokus pada cara men-debug-nya.

  • Ubah hak akses indikator atau cBot Anda menjadi FullAccess.

  • Lampirkan debugger ke proses yang sedang berjalan dari indikator atau cBot Anda. Anda dapat melakukannya dengan memanggil metode System.Diagnostics.Debugger.Launch().

1
2
3
4
5
6
7
8
9
protected override void OnStart()
{
    var result = System.Diagnostics.Debugger.Launch();

    if (result is false)
    {
        Print("Debugger launch failed");
    }    
}
1
2
3
4
5
6
7
8
9
protected override void Initialize()
{
    var result = System.Diagnostics.Debugger.Launch();

    if (result is false)
    {
        Print("Debugger launch failed");
    }    
}

Catatan

Metode System.Diagnostics.Debugger.Launch() harus dipanggil dalam metode OnStart() (untuk cBot) atau metode Initialize() (untuk indikator).

  • Jalankan instance baru dari cBot atau indikator Anda. Jika instance sudah berjalan, pilih di UI. Anda harus diarahkan ke Visual Studio dengan prompt untuk memilih debugger. Lakukan itu dan klik OK.

Image title

Setelah debugging dimulai, Anda dapat mengatur titik henti, (masuk ke) baris kode dan melihat tumpukan panggilan dan nilai variabel.

Untuk panduan lengkap tentang cara men-debug di Visual Studio, periksa dokumentasi debugging Visual Studio.

Menggunakan direktif preprosesor DEBUG

Anda juga dapat menggunakan direktif preprosesor DEBUG dalam kode cBot atau indikator Anda untuk mengontrol alur eksekusi.

Direktif #if DEBUG berguna ketika Anda ingin menjalankan hanya blok atau baris kode dalam mode debug.

1
2
3
4
5
6
7
8
9
protected override void OnStart()
{
#if DEBUG
    System.Diagnostics.Debugger.Launch();
    Print("Debugging");
#else
    Print("Not Debugging");
#endif
}

Dalam contoh di atas, baris kode "Not Debugging" tidak akan dikompilasi jika Anda membangun cBot Anda dalam mode debug.

Informasi tambahan tentang direktif prosesor C# tersedia dalam dokumentasi ini.