กําหนดค่าจุดสั่งหยุดแบบมีเงื่อนไขใน C#

เสร็จสมบูรณ์เมื่อ

ตัวดีบัก C# สําหรับ Visual Studio Code สนับสนุนตัวเลือกในการกําหนดค่าจุดสั่งหยุดที่จะทริกเกอร์เฉพาะเมื่อเป็นไปตามเงื่อนไขเท่านั้น จุดสั่งหยุดชนิดนี้เรียกว่าจุดสั่งหยุดแบบมีเงื่อนไข จุดสั่งหยุดแบบมีเงื่อนไขสามารถกําหนดค่าได้โดยตรง หรือโดยการแก้ไขจุดสั่งหยุดที่มีอยู่

หมายเหตุ

Visual Studio Code ยังสนับสนุนจุดสั่งหยุดตามเงื่อนไขที่ทริกเกอร์ตามจํานวนครั้งที่จุดสั่งหยุดถูก "ตี"

สมมติว่าคุณกําลังดีบักแอปพลิเคชันที่ประมวลผลข้อมูลผลิตภัณฑ์ในอาร์เรย์สตริงหลายมิติ อาร์เรย์ ประกอบด้วยจุดข้อมูลนับพัน ปัญหาที่คุณกําลังแก้จุดบกพร่องดูเหมือนจะเกิดขึ้นสําหรับผลิตภัณฑ์ที่มีการทําเครื่องหมายเป็นnew โค้ดของคุณประมวลผลอาร์เรย์ภายในการ for วนรอบ คุณจําเป็นต้องตั้งค่าจุดสั่งหยุดภายในรอบ แต่คุณต้องการหยุดชั่วคราวเมื่อผลิตภัณฑ์คือnew

ใช้จุดสั่งหยุดมาตรฐานเพื่อตรวจสอบแอปพลิเคชันการประมวลผลข้อมูล

  1. แทนที่เนื้อหาของไฟล์ Program.cs ของคุณด้วยโค้ดต่อไปนี้:

    int productCount = 2000;
    string[,] products = new string[productCount, 2];
    
    LoadProducts(products, productCount);
    
    for (int i = 0; i < productCount; i++)
    {
        string result;
        result = Process1(products, i);
    
        if (result != "obsolete")
        {
            result = Process2(products, i);
        }
    }
    
    bool pauseCode = true;
    while (pauseCode == true) ;
    

    รหัสนี้ใช้วิธีการที่ LoadProducts ชื่อว่า เพื่อโหลดข้อมูลลงใน products อาร์เรย์ หลังจากโหลดข้อมูลแล้ว รหัสจะทําซ้ําผ่านอาร์เรย์ และเรียกใช้เมธอดที่Process1ชื่อว่า และProcess2

  2. หากต้องการสร้างข้อมูลสําหรับกระบวนการจําลอง ให้เพิ่มวิธีการต่อไปนี้ลงในจุดสิ้นสุดของไฟล์ Program.cs ของคุณ:

    static void LoadProducts(string[,] products, int productCount)
    {
        Random rand = new Random();
    
        for (int i = 0; i < productCount; i++)
        {
            int num1 = rand.Next(1, 10000) + 10000;
            int num2 = rand.Next(1, 101);
    
            string prodID = num1.ToString();
    
            if (num2 < 91)
            {
                products[i, 1] = "existing";
            }
            else if (num2 == 91)
            {
                products[i, 1] = "new";
                prodID = prodID + "-n";
            }
            else
            {
                products[i, 1] = "obsolete";
                prodID = prodID + "-0";
            }
    
            products[i, 0] = prodID;
        }
    }
    

    วิธีการ LoadProducts จะสร้างรหัสผลิตภัณฑ์แบบสุ่มจํานวน 2000 รายการ และกําหนดค่าของ existing, newหรือ obsolete ให้กับฟิลด์คําอธิบายผลิตภัณฑ์ มีโอกาสประมาณ 1% ที่ผลิตภัณฑ์จะถูกทําเครื่องหมายnew

  3. เมื่อต้องการจําลองการประมวลผลข้อมูล ให้เพิ่มวิธีการต่อไปนี้ลงในจุดสิ้นสุดของไฟล์ Program.cs ของคุณ:

    static string Process1(string[,] products, int item)
    {
        Console.WriteLine($"Process1 message - working on {products[item, 1]} product");
    
        return products[item, 1];
    }
    
    static string Process2(string[,] products, int item)
    {
        Console.WriteLine($"Process2 message - working on product ID #: {products[item, 0]}");
        if (products[item, 1] == "new")
            Process3(products, item);
    
        return "continue";
    }
    
    static void Process3(string[,] products, int item)
    {
        Console.WriteLine($"Process3 message - processing product information for 'new' product");
    }
    

    วิธี Process1 และ Process2 แสดงข้อความความคืบหน้าและส่งกลับสตริง

    โปรดสังเกตว่าเมธอด จะProcess2เรียกใช้Process3ถ้าผลิตภัณฑ์คือnew

  4. บนเมนู ไฟล์ของ Visual Studio Code เลือก บันทึก

  5. ใกล้กับด้านบนของไฟล์ Program.cs ให้ตั้งค่าจุดสั่งหยุดในบรรทัดโค้ดต่อไปนี้:

    result = Process1(products, i);
    
  6. เปิดมุมมองเรียกใช้และดีบัก จากนั้นเลือก เริ่มการดีบัก

  7. ใช้ ขั้นตอนลงใน เพื่อแนะนํารหัสสําหรับ Process1 และProcess2

    โปรดสังเกตการอัปเดตไปยังส่วนตัวแปรและเรียกสแตกของมุมมองเรียกใช้และดีบัก

  8. ใช้ ขั้นตอนลงใน ต่อไปเพื่อทําตามรหัสจนกว่าคุณจะเห็นว่า i มีค่าเท่ากับ 3

    ส่วนตัวแปรของมุมมอง RUN และ DEBUG จะแสดงค่าที่กําหนดให้กับi

    โปรดสังเกตว่า Process1 และ Process2 แสดงข้อความไปยังแผง DEBUG CONSOLE แอปพลิเคชันจริงอาจจําเป็นต้องมีการโต้ตอบกับผู้ใช้เนื่องจากมีการประมวลผลข้อมูล การโต้ตอบบางอย่างอาจขึ้นอยู่กับข้อมูลที่กําลังประมวลผล

  9. ใช้ปุ่ม หยุด เพื่อหยุดการดําเนินการของโค้ด

กําหนดค่าจุดสั่งหยุดแบบมีเงื่อนไขโดยใช้นิพจน์

จุดสั่งหยุดมาตรฐานเหมาะสําหรับการเดินผ่านแอปพลิเคชันการประมวลผลข้อมูล อย่างไรก็ตาม ในกรณีนี้คุณสนใจnewผลิตภัณฑ์ และคุณไม่ต้องการทําตามการวิเคราะห์ของแต่ละผลิตภัณฑ์เพื่อหาผลิตภัณฑ์ที่เป็นnew สถานการณ์นี้เป็นตัวอย่างที่ดีเมื่อควรใช้จุดสั่งหยุดแบบมีเงื่อนไข

  1. คลิกขวาที่จุดสั่งหยุดที่มีอยู่ของคุณ แล้วเลือก แก้ไขจุดสั่งหยุด

  2. ใส่นิพจน์ต่อไปนี้:

    products[i,1] == "new";
    
  3. โปรดสังเกตว่านิพจน์จะไม่แสดงอีกต่อไปหลังจากที่คุณกด Enter

  4. เมื่อต้องการแสดงนิพจน์ชั่วคราว ให้วางตัวชี้เมาส์ไว้เหนือจุดสั่งหยุด (จุดสีแดง)

  5. เมื่อต้องการเรียกใช้แอปพลิเคชันของคุณด้วยจุดสั่งหยุดตามเงื่อนไขที่กําหนดค่าไว้ ให้เลือก เริ่มการดีบัก

  6. รอให้แอปพลิเคชันหยุดชั่วคราวที่จุดสั่งหยุดแบบมีเงื่อนไข

  7. สังเกตค่าของ i ที่แสดงภายใต้ส่วนตัวแปร

  8. บนแถบเครื่องมือ ตัวควบคุมแก้จุดบกพร่อง เลือก ดําเนินการต่อ

  9. โปรดสังเกตว่าค่าของ i ได้รับการอัปเดตส่วนตัวแปรแล้ว

  10. เลือก เข้าไปที่

  11. ดําเนินการเลือก ขั้นตอนลงใน จนกว่า Process1 ข้อความจะแสดงขึ้น

  12. โปรดสังเกตว่าProcess1รายงานว่ากําลังทํางานบนผลิตภัณฑ์ใหม่

  13. ใช้เวลาสักครู่เพื่อพิจารณาข้อดีของจุดสั่งหยุดแบบมีเงื่อนไขที่เสนอ

    ในสถานการณ์การประมวลผลข้อมูลจําลองนี้ มีโอกาสประมาณ 1% ที่ผลิตภัณฑ์คือnew หากคุณกําลังใช้จุดสั่งหยุดมาตรฐานเพื่อแก้จุดบกพร่องของปัญหา คุณจําเป็นต้องทําตามการวิเคราะห์ผลิตภัณฑ์ประมาณ 100 รายการเพื่อค้นหา new ผลิตภัณฑ์ที่คุณสนใจ

    จุดสั่งหยุดตามเงื่อนไขสามารถช่วยให้คุณประหยัดเวลาได้มากเมื่อคุณกําลังดีบักแอปพลิเคชัน

  14. ใช้ปุ่ม หยุด เพื่อหยุดการดําเนินการของโค้ด

ยินดีด้วย! คุณกําหนดค่าจุดสั่งหยุดตามเงื่อนไขเสร็จเรียบร้อยแล้ว

สรุป

นี่คือสองสิ่งสําคัญที่ต้องจําจากหน่วยนี้:

  • ใช้จุดสั่งหยุดมาตรฐานเพื่อหยุดแอปพลิเคชันชั่วคราวทุกครั้งที่พบจุดสั่งหยุด
  • ใช้จุดสั่งหยุดแบบมีเงื่อนไขเพื่อหยุดแอปพลิเคชันชั่วคราวเมื่อนิพจน์บูลีนประเมินเป็นtrue