แบบฝึกหัด - ตั้งค่าจุดสั่งหยุด
มีการใช้จุดสั่งหยุดระหว่างการดําเนินการดีบักกระบวนการหยุดชั่วคราว ซึ่งช่วยให้คุณสามารถติดตามตัวแปรและตรวจสอบลําดับที่มีการดําเนินการโค้ดของคุณ จุดสั่งหยุดเป็นวิธีที่ยอดเยี่ยมในการเริ่มต้นกระบวนการดีบักของคุณ
ตั้งค่าจุดสั่งหยุด
ก่อนหน้านี้ในโมดูลนี้คุณทําแบบฝึกหัดที่คุณเรียกใช้แอปพลิเคชันในตัวแก้ไขจุดบกพร่อง แอปพลิเคชันแสดง "ข้อความทักทาย" ในแผงคอนโซลดีบัก ในตอนท้ายของแบบฝึกหัด คุณสังเกตเห็นว่าโค้ดอวยพรของ Andrew ซ้ํากันในลักษณะที่ไม่คาดคิด
ในแบบฝึกหัดนี้ คุณจะใช้จุดสั่งหยุดเพื่อช่วยให้คุณระบุปัญหาได้
ตรวจสอบให้แน่ใจว่าไฟล์ Program.cs ของคุณมีตัวอย่างโค้ดต่อไปนี้:
/* This code uses a names array and corresponding methods to display greeting messages */ string[] names = new string[] { "Sophia", "Andrew", "AllGreetings" }; string messageText = ""; foreach (string name in names) { if (name == "Sophia") messageText = SophiaMessage(); else if (name == "Andrew") messageText = AndrewMessage(); else if (name == "AllGreetings") messageText = SophiaMessage(); messageText = messageText + "\n\r" + AndrewMessage(); Console.WriteLine(messageText + "\n\r"); } bool pauseCode = true; while (pauseCode == true); static string SophiaMessage() { return "Hello, my name is Sophia."; } static string AndrewMessage() { return "Hi, my name is Andrew. Good to meet you."; }ใช้เครื่องมือตัวแก้ไขจุดบกพร่อง Visual Studio Code เพื่อตั้งค่าจุดสั่งหยุดบนบรรทัดโค้ดแรกภายในการ
foreachวนรอบ
เคล็ดลับ
ตัวเลือกหนึ่งอย่างง่ายสําหรับการสลับเปิด/ปิดจุดสั่งหยุดคือการเลือก (คลิกซ้าย) พื้นที่ทางด้านซ้ายของหมายเลขบรรทัด จุดสั่งหยุดยังสามารถตั้งค่าโดยใช้
Runเมนู และโดยใช้แป้นพิมพ์ลัดได้อีกด้วยบนเมนูเรียกใช้ เลือกเริ่มการดีบัก
โปรดสังเกตว่าการดําเนินการโค้ดหยุดชั่วคราวที่จุดสั่งหยุด และบรรทัดโค้ดปัจจุบันจะถูกเน้นในตัวแก้ไข
บนแถบเครื่องมือตัวควบคุมแก้จุดบกพร่อง ให้เลือกขั้นตอนลงใน
คุณสามารถวางเมาส์ตัวชี้ไว้เหนือปุ่มบนแถบเครื่องมือ ตัวควบคุมแก้จุดบกพร่อง เพื่อแสดงป้ายชื่อปุ่มได้
โปรดสังเกตว่าการดําเนินการโค้ดเลื่อนไปยังบรรทัดโค้ดต่อไปนี้และหยุดชั่วคราว:
messageText = SophiaMessage();บรรทัดรหัสนี้จะกําหนดค่าที่ส่งกลับของ
SophiaMessageวิธีการ ให้กับตัวแปรmessageTextสตริงใช้เวลาสักครู่เพื่อพิจารณาว่าทําไมจึงเลือก ขั้นตอนในการสร้าง ผลลัพธ์นี้
- ปุ่ม Step Into ถูกใช้เพื่อไปต่อยังคําสั่งปฏิบัติการถัดไป
- เนื่องจากองค์ประกอบแรกใน
namesอาร์เรย์ คือSophiaและifคําสั่ง กําลังตรวจสอบชื่อSophiaนิพจน์จึงประเมินเป็นtrueและการดําเนินการโค้ดย้ายไปยังบล็อกรหัสของifคําสั่ง
บนแถบเครื่องมือตัวควบคุมแก้จุดบกพร่อง ให้เลือกขั้นตอนลงใน
โปรดสังเกตว่าการดําเนินการโค้ดเลื่อนไปยัง
SophiaMessageเมธอด และหยุดชั่วคราวปุ่ม Step Into มีขั้นสูงไปยังบรรทัดโค้ดที่สามารถเรียกใช้งานได้ถัดไป บรรทัดโค้ดปฏิบัติการถัดไปไม่ใช่หมายเลขบรรทัดถัดไปในไฟล์ เป็นคําสั่งถัดไปในเส้นทางการดําเนินการ ในกรณีนี้ คําสั่งปฏิบัติการถัดไปคือจุดที่จะเข้า
SophiaMessageไปยังเมธอดบนแถบเครื่องมือตัวควบคุมแก้จุดบกพร่อง ให้เลือกออกขั้นตอน
โปรดสังเกตว่าการดําเนินการโค้ดกลับไปยังบรรทัดโค้ดที่เรียกใช้
SophiaMessageวิธีการ และหยุดชั่วคราวใช้เวลาสักครู่เพื่อพิจารณาว่าทําไมจึงเลือก ขั้นตอนออก ผลลัพธ์นี้
เมื่ออยู่ภายในวิธีการ ปุ่ม ขั้นตอนออก จะเสร็จสิ้นบรรทัดที่เหลือของวิธีการปัจจุบัน แล้วจะกลับไปยังบริบทการดําเนินการที่เรียกใช้วิธีการ
บนแถบเครื่องมือตัวควบคุมแก้จุดบกพร่อง ให้เลือกขั้นตอนลงใน
โปรดสังเกตว่าการดําเนินการโค้ดเลื่อนไปยังบรรทัดโค้ดต่อไปนี้และหยุดชั่วคราว:
messageText = messageText + "\n\r" + AndrewMessage();ใช้เวลาสักครู่เพื่อพิจารณาว่าทําไมการดําเนินการขั้นสูงไปยังบรรทัดโค้ดนี้
แม้ว่าการเยื้องโค้ดหมายความว่าบรรทัดโค้ดนี้เป็นส่วนหนึ่งของบล็อกรหัสสําหรับ
else ifคําสั่ง แต่ว่าไม่ใช่ การใช้วงเล็บปีก{}กาเพื่อกําหนดบล็อกโค้ดสําหรับโครงสร้างนี้if - else ifจะช่วยหลีกเลี่ยงข้อบกพร่องนี้ เมื่อเขียนโค้ดแล้ว ข้อความของ Andrew จะถูกเพิ่มไปยังmessageTextแต่ละครั้งที่มีการวนรอบซ้ํา
ตรวจสอบการอัปเดตรหัสของคุณ
เมื่อคุณแยกปัญหาในรหัสของคุณแล้ว คุณควรอัปเดตรหัสของคุณแล้วตรวจสอบว่าปัญหาได้รับการแก้ไขแล้ว
บนแถบเครื่องมือตัวควบคุมแก้จุดบกพร่อง เลือกหยุด
ใช้เวลาสักครู่ในการแก้ไขตรรกะโค้ดของคุณ
คุณมีตัวเลือกสําหรับการแก้ไขปัญหาที่ระบุในโค้ดของคุณ เช่น:
คุณสามารถเก็บบรรทัดโค้ดที่มีอยู่ และเพิ่มวงเล็บปีก
{}กาในifโครงสร้างสําหรับแต่ละบล็อกโค้ดได้คุณสามารถผสานบรรทัดโค้ดสองบรรทัดที่ตามหลังคําสั่งสุดท้าย
else ifได้โดยสร้างคําสั่งเดียวดังนี้:else if (name == "AllGreetings") messageText = SophiaMessage() + "\n\r" + AndrewMessage();
ไม่ว่าจะด้วยวิธีใด รหัสที่อัปเดตแล้วของคุณต้องรวมการเรียกไปยัง
AndrewMessageภายในบล็อกรหัสเมื่อname == "AllGreetings"บนเมนู แฟ้ม ให้เลือก บันทึก
ใช้เครื่องมือ UI ของตัวดีบักเพื่อล้างจุดสั่งหยุดที่คุณตั้งค่าก่อนหน้านี้
บนเมนูเรียกใช้ เลือกเริ่มการดีบัก
ตรวจสอบว่าโค้ดของคุณสร้างผลลัพธ์ที่คาดหวังในขณะนี้
Hello, my name is Sophia. Hi, my name is Andrew. Good to meet you. Hello, my name is Sophia. Hi, my name is Andrew. Good to meet you.บนแถบเครื่องมือตัวควบคุมแก้จุดบกพร่อง เลือกหยุด
ยินดีด้วย! คุณใช้โปรแกรมแก้ไขจุดบกพร่อง Visual Studio Code เรียบร้อยแล้วเพื่อช่วยให้คุณแยกและแก้ไขปัญหาตรรกะได้
สรุป
นี่คือสิ่งสําคัญบางอย่างที่ต้องจําจากหน่วยนี้:
- ใช้จุดสั่งหยุดเพื่อหยุดการทํางานของรหัสชั่วคราวในระหว่างเซสชันการดีบัก
- ใช้ ขั้นตอนลงใน จากแถบเครื่องมือ ตัวควบคุม แก้จุดบกพร่อง เพื่อสังเกตบรรทัดโค้ดที่สามารถดําเนินการได้ถัดไป
- ใช้ Step Out จากแถบเครื่องมือ ตัวควบคุม Debug เพื่อเลื่อนผ่านวิธีการปัจจุบันและกลับไปยังบรรทัดโค้ดที่เรียกใช้เมธอด