‫เราจะกลับมาในวิดีโอนี้และอีกสองสามวิดีโอถัดไปที่ฉันต้องการแสดงวิธีใช้การดีบักและ
‫Visual Studio
‫และแนวคิดเบื้องหลังการดีบักคือการกำจัดจุดบกพร่อง
‫และบั๊กเหล่านั้นในบางครั้งอาจสังเกตได้ง่ายมาก เพราะเมื่อคุณรันโปรแกรมและเริ่มขัดข้อง
‫คุณก็รู้ โอเค คุณมีบั๊ก แต่บางครั้งก็เป็นบั๊กเชิงตรรกะ ซึ่งหมายความว่าจะไม่มีใครเห็นมันจริงๆ
‫ID ของคุณ แต่คุณหรือผู้ใช้ของคุณต้องถูกค้นพบ ซึ่งหวังว่าจะบอกคุณได้ว่าคุณจำเป็นต้องปรับปรุงหรือจำเป็นต้องกำจัดจุดบกพร่องนี้
‫และเพื่อแสดงให้คุณเห็นหรือสาธิตการทำงานของการดีบักใน Visual Studio ฉันได้สร้างโปรแกรมเล็กๆ
‫ขึ้นที่นี่
‫ฉันได้เตรียมเครื่องมือเล็กๆ น้อยๆ ที่เราจะใช้สำหรับสิ่งนี้ และเครื่องมือนี้จะเป็นเครื่องมือเชิญเพื่อนในปาร์ตี้
‫แนวคิดก็คือลูกสาวของฉันเพิ่งอายุได้ 3 ขวบ และเรามีงานเลี้ยงเล็กๆ น้อยๆ สำหรับเธอ และเธอสามารถชวนเพื่อนบางคนได้
‫และแน่นอนว่าเธออยากจะเชิญเธอไปทั้งโรงเรียนอนุบาล แต่เราอนุญาตให้เธอเชิญเพื่อนสามคนเท่านั้น
‫ตอนนี้เธอต้องตัดสินใจว่าจะชวนเพื่อนคนไหน
‫และแน่นอนว่ามันง่ายเพราะมีเพื่อนบางคนที่เธอชอบมากกว่าคนอื่น
‫แต่สุดท้ายฉันก็ไม่รู้ว่าเพื่อนที่เธอชอบคือใคร
‫ดังนั้น ถ้าฉันต้องตัดสินใจว่าเธอจะเชิญใครได้ ฉันจะเขียนโปรแกรมเล็กๆ ที่เขียนว่า
‫โอเค ทุกคนที่มีชื่อย่อและทั้งหมด
‫ใช่ ในกรณีนี้ สามารถเชิญสามคนเข้าร่วมงานปาร์ตี้ได้
‫ดังนั้นเธอจึงตั้งชื่อเพื่อนของเราทั้งหมด
‫แล้วผมจะบอกว่า เอาล่ะ คนที่ชื่อสั้นที่สุด สามคนที่มีชื่อสั้นที่สุดจะได้รับเชิญ
‫และนั่นคือเครื่องมือที่นี่
‫ที่ผมเขียนไป นั่นคือสิ่งที่มันทำ
‫ดังนั้นเราจึงมีรายชื่อ Frank, Joe, Michelle, Andy, Maria, Carlos และ Angelina
‫และเรามีวิธีรับเพื่อนปาร์ตี้ที่ต้องการรายชื่อและจำนวนคนที่ควรเลือกจากรายการนั้น
‫แล้วเรามี สำหรับแต่ละลูป ซึ่งเขียนชื่อคนเหล่านั้นหรือเด็กเหล่านั้น
‫ในกรณีของฉัน บนคอนโซล
‫ไม่เป็นไร.
‫ไม่มีอะไรแฟนซีเกินไป
‫และอัลกอริธึมที่ตัดสินว่าใครได้รับเชิญและใครไม่ใช่คือวิธีนี้ที่นี่ และที่นี่ เราเชิญเพื่อนปาร์ตี้หรือเราค้นหาว่าใครคือเพื่อนปาร์ตี้
‫แน่นอนว่าเราต้องการรายชื่อบุคคลที่เราสามารถตรวจสอบได้
‫จากนั้นเราตรวจสอบชื่อที่สั้นที่สุดและเปรียบเทียบเสมอ
‫ดังนั้นเราจึงตรวจสอบทุกคนในรายการและเปรียบเทียบเสมอ
‫ชื่อจะสั้นกว่าความยาวที่ระบุหรือเป็นชื่ออื่นหรือไม่?
‫ในท้ายที่สุด มันจะให้ชื่อที่สั้นที่สุดแก่ฉัน
‫แต่ที่นี่ฉันมีข้อผิดพลาดภายใน
‫ไม่เป็นไร.
‫ผมจะเปรียบเทียบมากกว่าชื่อที่สั้นที่สุดที่มีความยาวนั้น
‫ในกรณีนี้ ผมจะได้ชื่อที่ยาวที่สุดทั้งหมด แม้ว่าผมอยากได้ชื่อย่อทั้งหมดก็ตาม
‫นี่เป็นเพียงข้อบกพร่องโดยเจตนาที่ฉันนำมาใช้ เพราะตอนนี้คุณจะเห็นว่านี่คือสิ่งที่คุณอาจไม่สังเกตเห็น
‫แน่นอนว่ามันเป็นจุดบกพร่องเชิงตรรกะ และหากเราเรียกใช้โค้ด โค้ดจะยังคงทำงานอยู่
‫จะไม่มีข้อผิดพลาดหรือไม่มีข้อผิดพลาด
‫มันจะไม่ผิดพลาดมันจะทำให้เราชื่อผิด
‫แต่ตอนนี้ สำหรับเราในกรณีนี้ มันง่ายเพราะเราเห็นว่า โอเค มิเชลล์ แองเจลิน่าและคาร์ลอสเป็นชื่อยาวและเรารู้รายชื่อ
‫เราจึงรู้ว่ามีโจและแอนน์ มาเรียและแม้แต่แฟรงค์
‫เรามีชื่อที่สั้นกว่า แต่ด้วยเหตุผลบางอย่างชื่อเหล่านั้นจึงไม่อยู่ในรายชื่อ แม้ว่าเราต้องการให้มีชื่อที่สั้นที่สุดก็ตาม
‫ใช่.
‫คนหรือคนที่มีชื่อสั้นที่สุด
‫ฉันไม่รู้ว่าพวกมันเตี้ยหรือสูงแค่ไหน แต่ที่นี่ไม่สำคัญ
‫สิ่งสำคัญคือที่นี่เป็นเรื่องง่ายเพราะเรามีรายชื่อปรากฏที่นี่ในฐานะนักพัฒนา
‫แต่ถ้าเราได้รับรายชื่อจากที่อื่นล่ะ
‫สมมติว่าเราได้รับรายชื่อจากไฟล์ XML ซึ่งมีชื่อมากมายมหาศาล หรือเราได้รับรายชื่อจากอินเทอร์เน็ตและเราไม่สามารถดูรายการได้ก่อนที่จะประมวลผลโดยซอฟต์แวร์ของเราจริงๆ
‫ดังนั้น เราจะไม่เห็นว่าชื่อที่เราได้รับนั้นแท้จริงแล้วไม่ใช่ชื่อที่สั้นที่สุด
‫แต่ซอฟต์แวร์ของเรามีข้อบกพร่องเล็กๆ น้อยๆ นี้ และตอนนี้นั่นคือสิ่งที่วิธี get part ต่างกันทำ
‫มันจะส่งคืนเฉพาะชื่อที่สั้นที่สุด
‫แล้วเราก็มี get party friends พหูพจน์ ซึ่งเพิ่งส่งคืนรายชื่อทุกคนที่มีชื่อสั้น
‫ๆ จนถึงจำนวนหนึ่งที่เราจ่ายผ่านได้ที่นี่
‫เราเลยผ่านเลขสามไป ซึ่งหมายความว่าเราจะได้เพื่อนสามคน
‫ถ้าเราผ่านเลขสี่เราจะได้เพื่อนสี่คนเป็นต้น
‫ไม่เป็นไร.
‫นั่นคือสิ่งที่ซอฟต์แวร์ของเราทำในตอนนี้
‫เรามีการ์ดต้นฉบับในเชิงพาณิชย์กับแฟรงค์ ดังนั้นเราจึงมีรายชื่อเพื่อนปาร์ตี้ที่ว่างเปล่านี้
‫และตราบใดที่รายชื่อเพื่อนในปาร์ตี้นี้มีจำนวนที่ต่ำกว่า เราก็ได้จำนวนที่ผ่าน
‫เพียงตรวจสอบหาเพื่อนปาร์ตี้คนต่อไป
‫จากนั้นเราไปต่อและเพิ่มเข้าไปในรายชื่อเพื่อนปาร์ตี้
‫และสิ่งที่เราทำคือเราลบออกจากรายการที่ส่งถึงเรา
‫ตอนนี้เป็นสิ่งที่อันตรายมาก แต่เราทำเพราะเราเป็นนักพัฒนามือใหม่ และเราเพิ่งทำเคล็ดลับเล็ก
‫ๆ น้อย ๆ นี้ซึ่งเราคิดว่า โอเค ตอนนี้เรากำลังจะกำจัดตัวแปรหรือองค์ประกอบใน รายการ.
‫และเราทำสิ่งนั้นโดยทางโปรแกรม
‫จากนั้นทีละขั้นตอน เรามีรายการสั้น ๆ และมีเพียงคนที่เหลือเพื่อเปรียบเทียบ ซึ่งยังไม่มีอยู่ในรายการของเรา
‫ไม่เป็นไร.
‫นั่นคือสิ่งที่เราทำกับรายการนี้
‫ลบ.
‫แม้ว่านั่นจะไม่ใช่การเขียนโปรแกรมที่สะอาด แต่เราจะดูวิธีแก้ไขในภายหลังเช่นกัน
‫แต่สำหรับตอนนี้ เรามีซอฟต์แวร์และใช้งานได้
‫มันทำงานได้ดีโดยสิ้นเชิง
‫แต่เราจะหาวิธีแก้ไขข้อผิดพลาดนี้ได้อย่างไร
‫เพราะตอนนี้เรารู้แล้วว่าเรามีจุดบกพร่องและแน่นอนว่าเราสามารถอ่านโค้ดของเราได้
‫และในกรณีนี้ มันง่ายเพราะเป็นโค้ดเพียง 43 บรรทัด
‫แต่ลองนึกภาพว่ามันเป็นโค้ดหลายพันบรรทัด ไฟล์ต่างๆ มากมาย และมีคนจำนวนมากที่ทำงานเกี่ยวกับมัน และคุณไม่สามารถเข้าใจได้ว่าจุดบกพร่องคืออะไร
‫ตอนนี้ สิ่งที่คุณสามารถทำได้คือ คุณสามารถใช้ความสามารถในการดีบักของ Visual Studio และในการทำเช่นนั้น สิ่งที่คุณสามารถทำได้คือคุณสามารถเพิ่มเบรกพอยต์ได้
‫มาเริ่มกันที่จุดพักกันก่อน
‫เรามีสิ่งนี้
‫จุดสีแดงเล็กๆ ตรงนี้ทางด้านซ้ายมือ
‫โดยทั่วไปแล้ว แถบสีเทาที่คุณมีตรงนี้ เป็นที่ที่คุณสามารถเพิ่มเบรกพอยต์ได้
‫คุณสามารถเพิ่มเบรกพอยต์ได้ด้วยการกด F เก้า และฉันจะไม่ทำอย่างนั้นเพราะว่าเก้ากำลังหยุดซอฟต์แวร์บันทึกวิดีโอของฉันไว้ชั่วคราว
‫เลยต้องทำโดยใช้เมาส์
‫เลยไปแก้จุดบกพร่องแล้วกดสลับเบรกพอยต์ได้
‫สิ่งที่จะทำคือมันจะสร้างเบรกพอยต์นี้ให้ฉัน
‫คุณสามารถกด f เก้าได้แน่นอน
‫ดังนั้นช็อตคัทจึงมี 9 แบบ และง่ายกว่ามากเมื่อใช้ช็อตคัทเมื่อคุณกำลังดีบั๊ก แทนที่จะไปดีบั๊กและคลิกตลอดเวลา
‫ไม่เป็นไร.
‫ทำความคุ้นเคยกับการใช้ปุ่มต่างๆ บนแป้นพิมพ์ของคุณ
‫ไม่เป็นไร.
‫ดังนั้นเรามาเริ่มการดีบักกัน
‫เอาล่ะ ฉันไปแก้จุดบกพร่องแล้วเริ่มแก้จุดบกพร่อง หรือกด F ห้าเพื่อเริ่มการดีบักก็ได้
‫ตอนนี้เรามีลูกศรสีเหลืองเล็ก ๆ นี้ซึ่งบ่งชี้ว่านี่คือที่ที่ซอฟต์แวร์ของเราติดอยู่ในขณะนี้
‫และเราทำให้มันติดอยู่ตรงนั้น เพราะเราสร้างเบรกพอยต์ที่นี่
‫ซอฟต์แวร์กำลังพังทลาย ณ จุดนั้น และตอนนี้เราสามารถขับเคลื่อนซอฟต์แวร์ไปข้างหน้าตามจังหวะของเราเอง เพื่อให้เราสามารถดำเนินการทีละบรรทัด
‫และเราสามารถเจาะลึกลงไปได้อีก
‫มาทำกัน
‫ข้ามไปกด F10 หรือกดปุ่มนี้ด้านบนเพื่อข้ามไปขั้นตอนต่อไปได้เลย
‫อีกอย่าง ปุ่มเหล่านี้ใช้ได้เฉพาะเพราะฉันอยู่ในโหมดดีบักใช่ไหม
‫ดังนั้นฉันจึงเริ่มใช้งานซอฟต์แวร์ของฉัน และคุณยังสามารถดูขั้นตอนในการก้าวข้ามและก้าวออกได้ทั้งหมดที่นี่เช่นกัน
‫ดังนั้นคุณจึงมีหลายวิธี
‫ใช่ ก้าวข้าม ก้าวเข้าและก้าวออก หรือกดปุ่มเหล่านั้น
‫ไม่เป็นไร.
‫สิ่งที่ฉันทำอยู่ตอนนี้คือ ฉันกำลังไปยังบรรทัดถัดไป
‫ดังนั้นฉันจึงไปที่บรรทัดถัดไป
‫และตอนนี้คุณสามารถเห็นได้ว่าเพื่อนมีค่าซึ่งมีค่าเจ็ดประการ
‫ดังนั้นจึงเป็นรายชื่อเจ็ดสาย ได้แก่ Frank, Joe, Michelle และอื่นๆ
‫ที่ดัชนีศูนย์ เรามีแฟรงค์ที่ดัชนีหนึ่งกับโจ เป็นต้น
‫ตอนนี้เพื่อนในปาร์ตี้ยังคงเป็นรายการว่าง แม้ว่าเราจะกำหนดค่าให้กับมันก็ตาม
‫แต่นั่นเป็นเพราะเมื่อคุณอยู่ในบรรทัดที่ 11 บรรทัดที่สิบได้ดำเนินการแล้ว แต่บรรทัดที่ 11 ยังไม่ได้ดำเนินการ
‫นี่หมายความว่าเราต้องก้าวข้ามอีกครั้ง เพื่อให้คุณสามารถกด f สิบ อีกครั้งเพื่อไปยังบรรทัดถัดไป
‫และสาย 13 ของเรา
‫ดังนั้นบรรทัดที่ 12 ถูกข้ามไปเพราะไม่มีอะไรอยู่ที่นั่น ไม่มีรหัสอยู่ที่นั่น
‫และมันก็ไปที่นี้สำหรับแต่ละลูป
‫แต่ตอนนี้ ถ้าคุณต้องการเจาะลึกลงไปล่ะ?
‫แล้วถ้าอยากรู้ว่าเกิดอะไรขึ้นเมื่อเรียกวิธีนี้ว่า get party friends?
‫สิ่งที่คุณทำได้คือย้อนกลับโดยลากลูกศรนี้ขึ้น
‫ฉันเลยลากมันกลับขึ้นมา และตอนนี้ฉันกลับมาที่บรรทัดที่ 11 และตอนนี้ฉันก็ทำได้
‫แทนที่จะก้าวข้ามโดยการกด F สิบ ฉันสามารถก้าวเข้าไปโดยกด F 11 เพื่อที่ฉันจะได้กด F 11 และฉันก็ก้าวเข้าสู่วิธีการรับเพื่อนปาร์ตี้
‫ซึ่งหมายความว่าตอนนี้เราอยู่ในบรรทัดที่ 18 ซึ่งหมายความว่าตอนนี้เรา อยู่ภายในการเรียกเมธอด Get Party
‫Friends
‫และที่นี่เราก็ไปได้เช่นกัน
‫เป็นขั้นเป็นตอน.
‫เราสามารถตรวจสอบได้ว่าเพื่อนปาร์ตี้คืออะไร
‫เราสามารถตรวจสอบคุณค่าของเพื่อนปาร์ตี้ได้
‫คุณสามารถเห็นการนับเป็นศูนย์
‫ดังนั้นจึงเป็นรายการว่าง ซึ่งหมายความว่าไม่มีรายการในรายการ
‫แล้วเราก็มีวงจรวนซ้ำนี้ที่เราเปรียบเทียบสิ่งต่าง ๆ เพื่อให้เราสามารถไปที่บรรทัดถัดไป และเราเห็นว่าเพื่อนในปาร์ตี้เป็นศูนย์และเราเปรียบเทียบ
‫0 ถึง 4 และศูนย์น้อยกว่าสี่
‫ดังนั้นไวด์ลูปจึงเป็นหรือไวด์เป็นจริง
‫ดังนั้นเราจึงสามารถไปที่บรรทัดถัดไปและที่นี่เรากำลังเรียก Get Party Friend เพื่อให้เราสามารถเจาะลึกลงไปอีกเพื่อให้เราสามารถก้าวเข้าสู่ปาร์ตี้ได้
‫และคุณจะเห็นว่าตอนนี้เราอยู่ในวิธีนี้แล้ว
‫ดังนั้นการก้าวเข้าสู่วิธีการที่จะก้าวออกไป ซึ่งก็คือกะ f 11 กำลังกระโดดออกจากวิธีการ
‫แต่ตอนนี้เรามาดูวิธีการเรียกที่นี่กัน
‫เราจะเห็นว่าเรามีชื่อที่สั้นที่สุดคือโจ ณ จุดนี้
‫จากนั้นเรามีสิ่งนี้สำหรับลูปและต่อไปทีละขั้นตอนในสิ่งนี้สำหรับลูป
‫อันดับแรกเราตั้งค่าตัวแปรแล้วจึงเปรียบเทียบ
‫เมื่อการเปรียบเทียบเป็นจริง เราจะไปที่ for loop หรือภายใน for loop
‫แล้วเราจะได้สิ่งนี้ หากเราเปรียบเทียบคำสั่งอีกครั้ง และเราสามารถเห็นได้อย่างที่เห็น
‫ความยาวสามไม่มากกว่าความยาวหรือความยาวที่สั้นที่สุดของสาม
‫ดังนั้นสามจึงไม่ดี
‫สาม ทีนี้ if คำสั่งนี้ไม่เป็นความจริง ดังนั้นมันจึงไปที่ลูป for วนซ้ำถัดไป
‫ตอนนี้มันจะรัน for loop ซ้ำแล้วซ้ำอีก
‫ตอนนี้คุณสามารถก้าวออกไปและสิ่งที่จะทำคือจะก้าวออกจากการดำเนินการของวิธีนี้และจากนั้นคุณสามารถไปจากที่นั่นได้
‫แต่สิ่งที่คุณทำโดยสิ่งนี้คือ คุณไม่ได้ดำเนินการ for วนซ้ำตามปกติ
‫ดังนั้นหากฉันก้าวออกไปอีกครั้ง ฉันจะได้รับข้อโต้แย้งที่อยู่นอกขอบเขต
‫ดังนั้นคุณจึงต้องระมัดระวังที่นี่ไม่ให้เข้าออกตลอดเวลา แต่คุณต้องใช้เครื่องมือเหล่านี้อย่างกังวล
‫และแน่นอนว่าคุณสามารถเรียกใช้จากที่นั่นหรือหยุดการดีบัก คุณสามารถเริ่มกระบวนการดีบั๊กใหม่ทั้งหมดได้ เพราะตอนนี้เรา มีข้อผิดพลาดเล็กน้อยนี้และบางทีคุณอาจไม่ทราบวิธีแก้ไข
‫ดังนั้นเราจึงสามารถเรียกใช้สิ่งทั้งหมดอีกครั้ง และตอนนี้เราสามารถไปทีละขั้นตอนอีกครั้ง
‫และเราสามารถ
‫ก้าวข้าม ก้าวข้าม ก้าวข้ามไปจนมาถึงจุดที่มันตั้งชื่อให้เรา
‫คุณจะเห็นได้ว่าตอนนี้เราอยู่ที่มิเชล
‫ตอนนี้มันไปที่ชื่อถัดไปในรายการ ตอนนี้ที่ Angelina ไปที่ชื่อถัดไปในรายการและมันคือ
‫Carlos
‫คุณจะเห็นว่าคุณสามารถตรวจสอบทุกตัวแปรและสถานะของทุกตัวแปรได้ในทุกช่วงเวลา
‫ซึ่งสำคัญมากหากคุณต้องการคิดออก
‫ไม่เป็นไร.
‫นั่นคือแนวคิดทั่วไปเกี่ยวกับวิธีใช้เบรกพอยต์และวิธีเริ่มต้นกระบวนการดีบัก
‫ในวิดีโอหน้า เราจะมาดูวิธีแก้ไขข้อผิดพลาดเชิงตรรกะนี้ด้วยการดูตัวแปรและสถานะของพวกมันในวิธีที่ดีกว่า
‫เพราะตอนนี้ฉันสามารถวางเมาส์เหนือตัวแปรและดูว่ามีค่าเท่าใด ณ จุดใดจุดหนึ่ง
‫แต่ฉันต้องการเปรียบเทียบตัวแปรหลายตัวพร้อมกัน หรือดูสถานะของตัวแปรหลายตัวพร้อมกัน
‫และนั่นคือสิ่งที่เราจะดูในวิดีโอหน้า
‫แล้วเจอกันนะ