กําหนดค่าจุดสั่งหยุดแบบมีเงื่อนไขใน C#
ตัวดีบัก C# สําหรับ Visual Studio Code สนับสนุนตัวเลือกในการกําหนดค่าจุดสั่งหยุดที่จะทริกเกอร์เฉพาะเมื่อเป็นไปตามเงื่อนไขเท่านั้น จุดสั่งหยุดชนิดนี้เรียกว่าจุดสั่งหยุดแบบมีเงื่อนไข จุดสั่งหยุดแบบมีเงื่อนไขสามารถกําหนดค่าได้โดยตรง หรือโดยการแก้ไขจุดสั่งหยุดที่มีอยู่
หมายเหตุ
Visual Studio Code ยังสนับสนุนจุดสั่งหยุดตามเงื่อนไขที่ทริกเกอร์ตามจํานวนครั้งที่จุดสั่งหยุดถูก "ตี"
สมมติว่าคุณกําลังดีบักแอปพลิเคชันที่ประมวลผลข้อมูลผลิตภัณฑ์ในอาร์เรย์สตริงหลายมิติ อาร์เรย์ ประกอบด้วยจุดข้อมูลนับพัน ปัญหาที่คุณกําลังแก้จุดบกพร่องดูเหมือนจะเกิดขึ้นสําหรับผลิตภัณฑ์ที่มีการทําเครื่องหมายเป็นnew โค้ดของคุณประมวลผลอาร์เรย์ภายในการ for วนรอบ คุณจําเป็นต้องตั้งค่าจุดสั่งหยุดภายในรอบ แต่คุณต้องการหยุดชั่วคราวเมื่อผลิตภัณฑ์คือnew
ใช้จุดสั่งหยุดมาตรฐานเพื่อตรวจสอบแอปพลิเคชันการประมวลผลข้อมูล
แทนที่เนื้อหาของไฟล์ 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หากต้องการสร้างข้อมูลสําหรับกระบวนการจําลอง ให้เพิ่มวิธีการต่อไปนี้ลงในจุดสิ้นสุดของไฟล์ 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เมื่อต้องการจําลองการประมวลผลข้อมูล ให้เพิ่มวิธีการต่อไปนี้ลงในจุดสิ้นสุดของไฟล์ 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บนเมนู ไฟล์ของ Visual Studio Code เลือก บันทึก
ใกล้กับด้านบนของไฟล์ Program.cs ให้ตั้งค่าจุดสั่งหยุดในบรรทัดโค้ดต่อไปนี้:
result = Process1(products, i);เปิดมุมมองเรียกใช้และดีบัก จากนั้นเลือก เริ่มการดีบัก
ใช้ ขั้นตอนลงใน เพื่อแนะนํารหัสสําหรับ
Process1และProcess2โปรดสังเกตการอัปเดตไปยังส่วนตัวแปรและเรียกสแตกของมุมมองเรียกใช้และดีบัก
ใช้ ขั้นตอนลงใน ต่อไปเพื่อทําตามรหัสจนกว่าคุณจะเห็นว่า
iมีค่าเท่ากับ 3ส่วนตัวแปรของมุมมอง RUN และ DEBUG จะแสดงค่าที่กําหนดให้กับ
iโปรดสังเกตว่า
Process1และProcess2แสดงข้อความไปยังแผง DEBUG CONSOLE แอปพลิเคชันจริงอาจจําเป็นต้องมีการโต้ตอบกับผู้ใช้เนื่องจากมีการประมวลผลข้อมูล การโต้ตอบบางอย่างอาจขึ้นอยู่กับข้อมูลที่กําลังประมวลผลใช้ปุ่ม หยุด เพื่อหยุดการดําเนินการของโค้ด
กําหนดค่าจุดสั่งหยุดแบบมีเงื่อนไขโดยใช้นิพจน์
จุดสั่งหยุดมาตรฐานเหมาะสําหรับการเดินผ่านแอปพลิเคชันการประมวลผลข้อมูล อย่างไรก็ตาม ในกรณีนี้คุณสนใจnewผลิตภัณฑ์ และคุณไม่ต้องการทําตามการวิเคราะห์ของแต่ละผลิตภัณฑ์เพื่อหาผลิตภัณฑ์ที่เป็นnew สถานการณ์นี้เป็นตัวอย่างที่ดีเมื่อควรใช้จุดสั่งหยุดแบบมีเงื่อนไข
คลิกขวาที่จุดสั่งหยุดที่มีอยู่ของคุณ แล้วเลือก แก้ไขจุดสั่งหยุด
ใส่นิพจน์ต่อไปนี้:
products[i,1] == "new";โปรดสังเกตว่านิพจน์จะไม่แสดงอีกต่อไปหลังจากที่คุณกด Enter
เมื่อต้องการแสดงนิพจน์ชั่วคราว ให้วางตัวชี้เมาส์ไว้เหนือจุดสั่งหยุด (จุดสีแดง)
เมื่อต้องการเรียกใช้แอปพลิเคชันของคุณด้วยจุดสั่งหยุดตามเงื่อนไขที่กําหนดค่าไว้ ให้เลือก เริ่มการดีบัก
รอให้แอปพลิเคชันหยุดชั่วคราวที่จุดสั่งหยุดแบบมีเงื่อนไข
สังเกตค่าของ
iที่แสดงภายใต้ส่วนตัวแปรบนแถบเครื่องมือ ตัวควบคุมแก้จุดบกพร่อง เลือก ดําเนินการต่อ
โปรดสังเกตว่าค่าของ
iได้รับการอัปเดตส่วนตัวแปรแล้วเลือก เข้าไปที่
ดําเนินการเลือก ขั้นตอนลงใน จนกว่า
Process1ข้อความจะแสดงขึ้นโปรดสังเกตว่า
Process1รายงานว่ากําลังทํางานบนผลิตภัณฑ์ใหม่ใช้เวลาสักครู่เพื่อพิจารณาข้อดีของจุดสั่งหยุดแบบมีเงื่อนไขที่เสนอ
ในสถานการณ์การประมวลผลข้อมูลจําลองนี้ มีโอกาสประมาณ 1% ที่ผลิตภัณฑ์คือ
newหากคุณกําลังใช้จุดสั่งหยุดมาตรฐานเพื่อแก้จุดบกพร่องของปัญหา คุณจําเป็นต้องทําตามการวิเคราะห์ผลิตภัณฑ์ประมาณ 100 รายการเพื่อค้นหาnewผลิตภัณฑ์ที่คุณสนใจจุดสั่งหยุดตามเงื่อนไขสามารถช่วยให้คุณประหยัดเวลาได้มากเมื่อคุณกําลังดีบักแอปพลิเคชัน
ใช้ปุ่ม หยุด เพื่อหยุดการดําเนินการของโค้ด
ยินดีด้วย! คุณกําหนดค่าจุดสั่งหยุดตามเงื่อนไขเสร็จเรียบร้อยแล้ว
สรุป
นี่คือสองสิ่งสําคัญที่ต้องจําจากหน่วยนี้:
- ใช้จุดสั่งหยุดมาตรฐานเพื่อหยุดแอปพลิเคชันชั่วคราวทุกครั้งที่พบจุดสั่งหยุด
- ใช้จุดสั่งหยุดแบบมีเงื่อนไขเพื่อหยุดแอปพลิเคชันชั่วคราวเมื่อนิพจน์บูลีนประเมินเป็น
true