Langkau tajuk talian

Penyahpepijatan

Apakah penyahpepijatan

Penyahpepijatan ialah proses di mana anda boleh mengesan dan membaiki ralat yang terdapat dalam kod anda.

Mana-mana program .NET boleh dijalankan dalam dua mod yang berbeza.

  • Mod pelepasan - biasanya digunakan dalam persekitaran pengeluaran. Apabila menggunakannya, .NET mendayakan pelbagai pengoptimuman pengkompil dan just-in-time yang meningkatkan kelajuan pelaksanaan kod anda dan mengurangkan jejak memorinya.
  • Mod debug - terutamanya digunakan dalam persekitaran pembangunan dan pengujian. Semua pengoptimuman dinyahdayakan, dan anda boleh melampirkan penyahpepijat .NET kepada kod anda.

Apabila bekerja dengan perpustakaan dan aplikasi .NET, penyahpepijatan melibatkan perkara berikut:

  • Menjalankan kod anda dalam mod debug
  • Melampirkan penyahpepijat .NET kepada kod anda
  • Menetapkan titik henti kod untuk menunjukkan sama ada aliran pelaksanaan harus berhenti seketika
  • Mengikuti aliran pelaksanaan kod dengan henti yang dirancang pada titik henti

Takrifkan penyahpepijat .NET

Penyahpepijat .NET ialah program yang menggunakan API masa larian. API ini, seterusnya, membolehkan kawalan aliran pelaksanaan proses .NET. Dengan kata lain, mereka boleh menghentikan pelaksanaan pada titik henti yang diberikan dan menyimpan pelbagai keadaan (termasuk nilai yang dipegang oleh pemboleh ubah individu semasa keadaan ini).

Bina algo dalam mod debug

Seperti yang telah kita bincangkan di atas, menyahpepijat cBot atau indikator melibatkan pembinaan sambungan ini dalam mod debug. Secara lalai, apabila anda klik butang Bina dalam UI cTrader, sambungan anda dijalankan dalam mod pelepasan untuk mendayakan pengoptimuman kod.

Untuk membina cBot atau indikator anda dalam mod debug, anda perlu menggunakan sama ada CLI .NET atau IDE luaran seperti Visual Studio. Dalam dokumentasi ini, kami menunjukkan proses debug seperti yang berlaku dalam Visual Studio. Walau bagaimanapun, proses ini juga boleh direplikasi dalam IDE lain dengan perubahan kecil.

Pasang versi terkini Visual Studio pada mesin anda dan lakukan tindakan berikut:"

  • Buka indikator atau cBot anda dalam Visual Studio dengan memilih pilihan Edit dalam Visual Studio dalam dropdown Edit dalam... di bahagian atas tetingkap penyunting kod.

  • Dalam menu di atas penyunting kod Visual Studio, pilih Debug.

Image title

  • Bina cBot atau indikator anda dalam mod debug.

Debug cBot atau indikator

Sekarang anda tahu cara membina cBot atau indikator dalam mod nyahpepijat, kita akan fokus pada cara untuk menyahpepijatnya.

  • Tukar hak akses indikator atau cBot anda kepada FullAccess.

  • Lampirkan penyahpepijat kepada proses berjalan indikator atau cBot anda. Anda boleh melakukannya dengan memanggil kaedah 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");
    }    
}

Nota

Kaedah System.Diagnostics.Debugger.Launch() perlu dipanggil dalam kaedah OnStart() (untuk cBot) atau kaedah Initialize() (untuk indikator).

  • Jalankan contoh baharu cBot atau indikator anda. Jika contoh sudah berjalan, pilih ia dalam UI. Anda sepatutnya dialihkan ke Visual Studio dengan gesaan untuk memilih penyahpepijat. Lakukan demikian dan klik OK.

Image title

Sebaik sahaja penyahpepijatan bermula, anda boleh menetapkan titik henti, (langkah ke dalam) baris kod dan melihat tindanan panggilan dan nilai pemboleh ubah.

Untuk panduan lengkap tentang cara menyahpepijat dalam Visual Studio, semak dokumentasi penyahpepijatan Visual Studio.

Gunakan arahan prapemproses DEBUG

Anda juga boleh menggunakan arahan prapemproses DEBUG dalam kod cBot atau indikator anda untuk mengawal aliran pelaksanaan.

Arahan #if DEBUG berguna apabila anda mahu menjalankan hanya blok atau baris kod dalam mod nyahpepijat.

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 kod "Not Debugging" tidak akan dikompil jika anda membina cBot anda dalam mod nyahpepijat.

Maklumat tambahan tentang arahan pemproses C# boleh didapati dalam dokumentasi ini.