ข้ามไปที่เนื้อหา

การดีบัก

การดีบักคืออะไร

การดีบักเป็นกระบวนการที่คุณสามารถตรวจจับและแก้ไขข้อผิดพลาดที่มีอยู่ในโค้ดของคุณ

โปรแกรม .NET ใดๆ สามารถทำงานได้ในสองโหมดที่แตกต่างกัน

  • โหมดรีลีส - โดยทั่วไปใช้ในสภาพแวดล้อมการผลิต เมื่อใช้งาน .NET จะเปิดใช้งานการเพิ่มประสิทธิภาพคอมไพเลอร์และ just-in-time ต่างๆ ซึ่งช่วยเพิ่มความเร็วในการทำงานของโค้ดของคุณและลดการใช้หน่วยความจำ
  • โหมดดีบัก - ใช้หลักๆ ในสภาพแวดล้อมการพัฒนาและทดสอบ การเพิ่มประสิทธิภาพทั้งหมดถูกปิดใช้งาน และคุณสามารถแนบตัวดีบัก .NET กับโค้ดของคุณได้

เมื่อทำงานกับไลบรารีและแอปพลิเคชัน .NET การดีบักประกอบด้วยสิ่งต่อไปนี้:

  • การรันโค้ดของคุณในโหมดดีบัก
  • การแนบตัวดีบัก .NET กับโค้ดของคุณ
  • การตั้งค่าจุดพักโค้ดเพื่อระบุว่าควรหยุดการทำงานชั่วคราวหรือไม่
  • การติดตามการทำงานของโค้ดด้วยการหยุดชั่วคราวที่วางแผนไว้ที่จุดพัก

กำหนดตัวดีบัก .NET

ตัวดีบัก .NET เป็นโปรแกรมที่ใช้ API ในขณะทำงาน API เหล่านี้ช่วยให้สามารถควบคุมการทำงานของกระบวนการ .NET กล่าวอีกนัยหนึ่ง พวกมันสามารถหยุดการทำงานชั่วคราวที่จุดพักที่กำหนดและเก็บสถานะต่างๆ (รวมถึงค่าที่ตัวแปรแต่ละตัวเก็บไว้ในระหว่างสถานะเหล่านี้)

สร้างอัลกอในโหมดดีบัก

ตามที่เราได้กล่าวไว้ข้างต้น การดีบัก cBot หรือตัวบ่งชี้จะต้องสร้างส่วนขยายนี้ในโหมดดีบัก โดยค่าเริ่มต้น เมื่อคุณคลิกปุ่ม สร้าง ในอินเทอร์เฟซผู้ใช้ cTrader ส่วนขยายของคุณจะทำงานในโหมดรีลีสเพื่อเปิดใช้งานการเพิ่มประสิทธิภาพโค้ด

ในการสร้าง cBot หรือตัวบ่งชี้ของคุณในโหมดดีบัก คุณต้องใช้ .NET CLI หรือ IDE ภายนอกเช่น Visual Studio ในเอกสารนี้ เราแสดงกระบวนการดีบักตามที่เกิดขึ้นใน Visual Studio อย่างไรก็ตาม กระบวนการนี้สามารถทำซ้ำได้ใน IDE อื่นๆ โดยมีการเปลี่ยนแปลงเล็กน้อย

ติดตั้ง Visual Studio เวอร์ชันล่าสุด บนเครื่องของคุณและดำเนินการดังต่อไปนี้:

  • เปิดตัวบ่งชี้หรือ cBot ของคุณใน Visual Studio โดยเลือกตัวเลือก แก้ไขใน Visual Studio ในเมนูแบบเลื่อนลง แก้ไขใน... ที่ด้านบนของหน้าต่างตัวแก้ไขโค้ด

  • ในเมนูด้านบนของตัวแก้ไขโค้ด Visual Studio ให้เลือก ดีบัก

Image title

  • สร้าง cBot หรือตัวบ่งชี้ของคุณในโหมดดีบัก

ดีบัก cBot หรือตัวบ่งชี้

ตอนนี้คุณรู้วิธีสร้าง cBot หรือตัวบ่งชี้ในโหมดดีบักแล้ว เราจะมุ่งเน้นไปที่วิธีการดีบักจริงๆ

  • เปลี่ยนสิทธิ์การเข้าถึงตัวบ่งชี้หรือ cBot ของคุณเป็น FullAccess

  • แนบตัวดีบักกับกระบวนการทำงานของตัวบ่งชี้หรือ cBot ของคุณ คุณสามารถทำได้โดยเรียกใช้เมธอด 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");
    }    
}

หมายเหตุ

เมธอด System.Diagnostics.Debugger.Launch() ต้องถูกเรียกใช้ในเมธอด OnStart() (สำหรับ cBot) หรือเมธอด Initialize() (สำหรับตัวบ่งชี้)

  • รันอินสแตนซ์ใหม่ของ cBot หรือตัวบ่งชี้ของคุณ หากมีอินสแตนซ์ที่กำลังทำงานอยู่แล้ว ให้เลือกในอินเทอร์เฟซผู้ใช้ คุณควรถูกนำไปยัง Visual Studio พร้อมพรอมต์ให้เลือกตัวดีบัก ทำเช่นนั้นและคลิก ตกลง

Image title

เมื่อเริ่มการดีบัก คุณสามารถตั้งค่าจุดพัก (เข้าสู่) บรรทัดของโค้ด และดูสแต็กการเรียกและค่าตัวแปรได้

สำหรับคู่มือฉบับสมบูรณ์เกี่ยวกับวิธีการดีบักใน Visual Studio โปรดตรวจสอบ เอกสารการดีบัก Visual Studio.

ใช้คำสั่งตัวประมวลผลล่วงหน้า DEBUG

คุณยังสามารถใช้คำสั่งตัวประมวลผลล่วงหน้า DEBUG ในโค้ด cBot หรือตัวบ่งชี้ของคุณเพื่อควบคุมการทำงานได้

คำสั่ง #if 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
}

ในตัวอย่างด้านบน บรรทัดโค้ด "Not Debugging" จะไม่ถูกคอมไพล์หากคุณสร้าง cBot ในโหมดดีบัก

ข้อมูลเพิ่มเติมเกี่ยวกับคำสั่งตัวประมวลผลล่วงหน้า C# มีอยู่ใน เอกสารนี้.