สวัสดีและยินดีต้อนรับการกลับมา
ในการบรรยายนี้ ฉันต้องการสาธิตวิธีการใช้ดีบักเกอร์
ดังนั้นฉันจึงอยากจะเรียกใช้ส่วนติดต่อผู้ใช้แบบกราฟิก แสดงให้คุณเห็นว่าคุณสามารถเริ่มโปรแกรมในโหมดดีบั๊กได้อย่างไร
วิธีตั้งค่าเบรกพอยต์ วิธีดู call stack และวิธีดูตัวแปรต่างๆ โดยใช้หน้าต่างเฝ้าดู
แค่โปรแกรมง่ายๆ ที่กำหนดค่าเฉลี่ย
ฉันจะใช้สิ่งนี้เป็นการสาธิตของฉัน
ทั้งหมดที่ทำได้คืออ่านจำนวนเต็มสามจำนวนและจัดเก็บแล้วคำนวณค่าเฉลี่ย
ตอนนี้ สิ่งหนึ่งที่ฉันต้องการพูดถึงก่อนที่เราจะใช้ดีบักเกอร์ คุณต้องแน่ใจว่าการกำหนดค่าของคุณได้รับการตั้งค่าอย่างถูกต้อง
และฉันได้พูดถึงเรื่องนี้ไปแล้วในวิดีโอก่อนหน้านี้ โดยพื้นฐานแล้วคือการกำหนดค่าไฟโค้ดสำหรับการใช้ดีบักเกอร์
แต่เพียงเพื่อรีเฟรชหน่วยความจำของคุณ คุณสามารถเลือกโครงการได้ที่นี่ คุณสามารถคลิกขวาและไปที่การตั้งค่า
คุณต้องการตรวจสอบอีกครั้ง ขึ้นอยู่กับแพลตฟอร์มที่คุณใช้ คุณต้องแน่ใจว่าการตั้งค่าดีบักเกอร์ที่นี่ทางด้านซ้ายมีเส้นทางที่ถูกต้องไปยัง
GDB
ตอนนี้ หากคุณใช้ Windows ที่อาจเกี่ยวข้องกับการใช้ GDB X จาก Cygwin หรืออาจใช้ MinGW w64 ไม่ว่าคุณจะทำงานอะไรก็ตาม
หากคุณใช้ Unix และ Linux เส้นทางนี้ไม่จำเป็นต้องตั้งค่าด้วยซ้ำ
สิ่งสำคัญอีกอย่างคือในตัวเลือกคอมไพเลอร์ที่คุณต้องการตรวจสอบให้แน่ใจว่าคุณกำลังคอมไพล์สำหรับการดีบัก
เพื่อให้ Dash G dwarf อยู่ใน dash o เพื่อเพิ่มประสิทธิภาพ
อีกครั้งใน Windows ต้องตั้งค่าสิ่งเหล่านี้เพื่อให้มีข้อมูลการดีบักพร้อมกับไฟล์ปฏิบัติการของคุณ
คุณต้องตรวจสอบให้แน่ใจว่าคุณกำลังสร้างโหมดดีบัก
ดังนั้นคุณต้องตรวจสอบให้แน่ใจว่าได้เลือกการดีบักแล้วและไม่ปล่อย
เมื่อคุณกำหนดค่าสิ่งเหล่านั้นทั้งหมดอย่างถูกต้องแล้ว คุณควรจะสามารถใช้ดีบักเกอร์และไฟแสดงรหัสได้
หากคุณมีปัญหาเกี่ยวกับสิ่งนั้น โปรดกลับไปที่วิดีโอของฉันเพื่อกำหนดค่าบนแพลตฟอร์มของคุณ
ดีบักเกอร์และโค้ดไลท์
แนวคิดที่สำคัญที่สุดเกี่ยวกับดีบักเกอร์คือแนวคิดของเบรกพอยต์
ดังนั้นเบรกพอยต์คือสิ่งที่คุณสามารถตั้งค่าในโปรแกรมของคุณซึ่งจะหยุดการดำเนินการโค้ดของคุณ
คุณสามารถพูดได้ว่า เฮ้ ฉันต้องการหยุดที่บรรทัดนี้ และโปรแกรมของคุณเมื่อคุณรันโปรแกรมดีบักเกอร์จะหยุดที่บรรทัดนั้น
ซึ่งทำให้คุณสามารถดูตัวแปร ค่าของตัวแปรได้
ช่วยให้คุณก้าวผ่านรหัสของคุณทีละบรรทัดเพื่อพยายามวินิจฉัยและแก้ไขปัญหาที่อาจเกิดขึ้น
โดยปกติแล้ว เมื่อคุณรันโปรแกรมของคุณ หากคุณพยายามรันโปรแกรมในดีบักเกอร์และคุณไม่ได้ตั้งค่าเบรกพอยต์ไว้
ก็จะไม่มีอะไรเกิดขึ้น
ดังนั้นโดยปกติเมื่อคุณสร้าง คุณรู้ไหม คุณสามารถไปและคุณสามารถสร้างโครงการของคุณได้เหมือนกับโครงการอื่นๆ
ไปสร้าง ไปสร้างโครงการ
เมื่อคุณสร้างและรันในโหมดดีบัก คุณต้องไปที่ตัวเลือกเมนูดีบักเกอร์ และคุณต้องไปที่เริ่มต้น
ดำเนินการดีบักเกอร์ต่อ
และเมื่อคุณดำเนินการอีกครั้ง ถ้าคุณตั้งค่าเบรกพอยต์ไว้ มันก็จะกระทบกับมัน
หากคุณไม่ได้ตั้งค่าเบรกพอยต์ มันจะทำงาน
ดังนั้นหากเราพยายามเรียกใช้โปรแกรมนี้ในโหมดดีบั๊ก มันจะขึ้นมาและขอให้ป้อนเพราะมันหยุดตรงที่ตัวเลข
จากนั้นคุณก็กดตัวเลขบางตัวเข้าไปและมันก็ปิดลง
มันไม่ได้พิมพ์ข้อมูลออกมาจริง ๆ ใช่ไหม?
ดังนั้นจึงสำคัญมากหากคุณต้องการใช้ดีบักเกอร์ที่คุณมีชุดเบรกพอยต์อย่างน้อยหนึ่งชุด
วิธีที่ง่ายที่สุดในการตั้งค่าเบรกพอยต์คือคลิกภายในระยะขอบข้างหมายเลขบรรทัดบนหมายเลขบรรทัดที่คุณต้องการตั้งค่าเบรกพอยต์
และอีกครั้ง เบรกพอยต์จะหยุดการดำเนินการกับหมายเลขบรรทัดนั้น
ดังนั้นหากเราตั้งค่าเบรกพอยต์ด้วยฟังก์ชัน printf ในบรรทัดที่ 10 เราเพียงดับเบิลคลิก คุณจะเห็นว่ามีวงกลมสีแดงปรากฏขึ้น
นี่เป็นการบอกดีบักเกอร์ว่า เฮ้ หยุดที่บรรทัดที่สิบ
อีกครั้ง วิธีที่เราเริ่มดีบักเกอร์คือเราขึ้นไปที่ดีบักเกอร์แล้วพูดว่า เริ่ม ดำเนินการต่อ ใช่ไหม
ทุกสิ่งทุกอย่างเป็นสีเทาใช่มั้ย?
งั้นเรามาเริ่มดีบักเกอร์เพื่อกดเบรกพอยต์นั้นกัน
เรามาเริ่มดีบักเกอร์กันต่อ และเราจะพูดว่า build และ debug แล้วคุณจะสังเกตเห็นว่าโปรแกรมหยุดที่บรรทัดที่สิบ
คุณเห็นลูกศรสีเขียวนั่น คุณยังเห็นว่าบานหน้าต่างดีบักเกอร์ปรากฏขึ้น
ดังนั้นหากคุณไปดู คุณสามารถเรียกบานหน้าต่างดีบักเกอร์ขึ้นมาได้ด้วยตนเอง หรือสามารถเปิดขึ้นมาโดยอัตโนมัติเมื่อคุณเข้าสู่โหมดดีบักเกอร์
และบานหน้าต่างดีบักเกอร์มีแท็บต่างๆ มากมายสำหรับข้อมูลที่สามารถดูได้
คุณยังสามารถผ่านดีบักเกอร์ที่คุณไปที่หน้าต่าง GDB คุณสามารถดูรายการทั้งหมดที่ได้รับการตรวจสอบ
มีหน้าต่างดีบักเกอร์มากมายที่คุณสามารถดูได้
ดังนั้นคนในท้องถิ่นมักจะเกี่ยวข้องกับนาฬิกาตัวแปรท้องถิ่นของคุณ
คุณสามารถวางนาฬิกาไว้บนตัวแปร เพื่อที่ว่าหากตัวแปรเปลี่ยนแปลง นาฬิกาจะเด้งขึ้นมา
เอาต์พุตใช้สำหรับตัวเลือกการดีบักและเธรดเอาต์พุตที่แตกต่างกัน
คุณสามารถดูเธรดที่กำลังเรียกใช้โปรแกรมของคุณได้
แนวคิดที่ล้ำหน้ากว่า Callstack คือสิ่งที่เรามุ่งเน้น
โดยพื้นฐานแล้วเราจะดูคอลแต็กและคนในท้องถิ่น
สิ่งเหล่านี้คือสองสิ่งที่สำคัญที่สุดที่จะช่วยคุณในการดีบั๊ก หน่วยความจำ และเบรกพอยต์
คุณสามารถดูตำแหน่งจุดพักได้
ตัวเลือกที่แตกต่างกันมากมาย
ขณะนี้เราหยุดอยู่ที่บรรทัดที่สิบ
เราสามารถดูที่กองโทร
call stack แสดงให้เราเห็นว่าฟังก์ชันหลักถูกเรียกใช้
ถ้าเราดูที่ภาษาท้องถิ่น มันแสดงให้เราเห็นสามตัวแปร ศูนย์หนึ่งและศูนย์
เราไม่ได้ป้อนข้อมูลใด ๆ จริง ๆ ในข้อมูลเหล่านั้นเริ่มต้นเป็นศูนย์หนึ่งและศูนย์
คุณสามารถเพิ่มนาฬิกาได้จริง
เพิ่มโดยการกดเครื่องหมายบวกเพื่อเพิ่มนาฬิกาในตัวแปรเฉพาะ
แล้วสิ่งสำคัญอีกอย่างที่ควรสังเกตก็คือ เมื่อคุณรันในโหมดดีบัก ตอนนี้คุณมีแถบเครื่องมือสำหรับดีบักเกอร์แล้วใช่ไหม
ปุ่มเล่นจะดำเนินต่อไป
ก็เลยจะไป
ถ้ากด play มันจะออกจากโปรแกรมใช่ไหมครับ?
มันจะเพิ่งเริ่มทำงาน
โปรแกรมจะขออินพุตจริง
ผมก็เลยกดเล่น
ฉันกลับไปที่คอนโซลแอ็พพลิเคชันและระบุว่า Enter
ดังนั้นฉันจึงตีเลขสามตัวในรายการวิ่ง
จากนั้นคุณก็ยังไม่เห็นฟังก์ชันการพิมพ์
หน้าต่างเพิ่งหายไป
อีกครั้ง เรารันในโหมดดีบัก และไปที่เบรกพอยต์อีกครั้ง บานหน้าต่างดีบักเกอร์ปรากฏขึ้น หยุดบรรทัดที่สิบ
ตอนนี้แถบเครื่องมือมีความสำคัญเพราะนี่คือวิธีที่คุณสามารถก้าวผ่านโค้ดของคุณ และคุณสามารถใช้แถบเครื่องมือจริง
ๆ หรือคุณสามารถไปที่ดีบักเกอร์และคุณสามารถดูตัวเลือกทั้งหมดได้ที่นี่
ดังนั้น คุณสามารถพูดว่า step into step into instruction next, next instruction, step out, step into จะเข้าไปข้างในฟังก์ชัน
หากมีการเรียกใช้ฟังก์ชันในบรรทัดนั้น ขั้นตอนในคำสั่งจะไปเพิ่มเติมที่สิ่งประเภทภาษาแอสเซมบลี
ต่อไปเราจะข้ามบรรทัดของรหัสต่อไป
และคำสั่งคอเป็นสิ่งเดียวกัน
ก้าวออกไป พยายามกระโดดออกจากฟังก์ชันถ้าคุณอยู่ในฟังก์ชันนั้นแล้ว ข้ามไปที่เส้นแครอท
ที่จริงฉันคิดว่าไปที่เคอร์เซอร์
เช่นเดียวกับการวิ่งไปที่เส้นแครอท
คุณสามารถเปิดและปิดเบรกพอยต์ ปิดใช้งานทั้งหมด ทุกสิ่งนั้น เพื่อให้คุณสามารถเข้าถึงสิ่งนี้ได้ผ่านเมนู
หรืออีกครั้งแถบเครื่องมือ
ปกติผมใช้แถบเครื่องมือเพราะมันขึ้นแล้ว
และถ้าคุณดูที่หน้าต่างต่างๆ อีกครั้ง คนในพื้นที่จะเรียกสแต็กและเบรกพอยต์
คนสำคัญเหล่านั้นจริงๆ
นี่บอกว่าฉันมีจุดพักที่บรรทัดที่สิบ
แล้วฉันคิดว่ามีคนพูดเคอร์เซอร์
ตอนนี้ฉันหยุดที่นี่ที่พิมพ์ F เข้าสู่บรรทัดที่สิบ
ฉันสามารถไปที่คำแนะนำถัดไปและนี่จะเป็นการสแกนบรรทัดที่ 11
F เป็นฟังก์ชันบล็อกที่ขออินพุต
ถ้าฉันพยายามไปต่อที่นี่ จริงๆ มันก็แค่หยุดชั่วคราว
คุณอาจต้องตีครั้งต่อไปหลายครั้ง
สิ่งที่ฉันมักจะทำเมื่อโปรแกรมขออินพุตและฉันต้องการ มันถูกบล็อกแล้ว หยุดทำงานไปแล้ว และฉันต้องการให้ไปยังรายการถัดไป
ฉันจะใส่จุดพักในบรรทัดถัดไปแล้วกดปุ่มเล่น
ตอนนี้ฉันกดปุ่มเล่นและไม่มีอะไรเกิดขึ้นเพราะกำลังรออินพุต
ในโปรแกรมมีข้อความว่า Enter
ตอนนี้ฉันสามารถตีห้า หก เจ็ด กดปุ่ม Enter และตอนนี้มันถึงจุดพักของฉัน
ตอนนี้เราอยู่ที่ปุ่มพิมพ์ซึ่งเราสามารถข้ามไปยังฟังก์ชันการพิมพ์ได้
และที่จริงอย่างแรก มันจะข้ามไปที่ฟังก์ชันเฉลี่ย
ถ้าเราพูดว่า step-in จะเห็นว่าเราไปที่ฟังก์ชันเฉลี่ย
และสิ่งที่คุณจะสังเกตได้ก็คือ ถ้าคุณดูที่ตัวแปรของคุณ คุณจะเห็นได้ว่าตัวแปรของคุณเปลี่ยนไป
ถ้าคุณไปต่อ คุณไปที่บรรทัดถัดไปใน 27 แล้ว 28 แล้วกดต่อไป
ต่อไป คุณกระโดดออกมาจริง ๆ และคุณอยู่ที่จุดสิ้นสุดของฟังก์ชัน
จากนั้นคุณสามารถกดเล่นและคุณจะเห็นว่าโปรแกรมของคุณเสร็จสมบูรณ์แล้วและหน้าต่างหายไป
แต่คุณสามารถดูตัวแปรของคุณ คุณสามารถดูอย่างอื่นได้
และอีกครั้ง คุณสามารถใส่จุดพักในฟังก์ชันการพิมพ์ได้ที่นี่
และถ้าเราวิ่งไปที่จุดนั้น เราจะเห็นอีกครั้งว่าฟังก์ชันการพิมพ์จะหยุดดำเนินการแทนค่าเฉลี่ย
แล้วเราจะสามารถเห็นสิ่งที่เกิดขึ้นจริง ถ้าเราก้าวข้ามและไปที่แอปพลิเคชัน
คุณจะเห็นว่าข้อมูลถูกพิมพ์ออกมา
ขวา?
เมื่อคุณดำเนินการต่อ เมื่อคุณรันจนจบ คุณจะได้รับคำสั่ง return และโปรแกรมจะออก
ดังนั้น สิ่งสำคัญคือหากคุณต้องการดูผลลัพธ์ของโปรแกรม โดยที่คุณวางจุดพักก่อนที่จะกลับมา
และคุณไม่ต้องดำเนินการต่อ
คุณสามารถหยุดดีบักเกอร์ได้ด้วยการกดปุ่มสี่เหลี่ยมสีแดง หยุดดีบักเกอร์ชั่วคราวโดยกดแถบขนานสองแถบ
รีสตาร์ทดีบักเกอร์ด้วยตัวเลือกนั้นและเรียก callstack
อีกครั้ง จะเห็นได้ง่ายขึ้นที่นี่ หากคุณเข้าไปในฟังก์ชันและเรียกใช้ดีบักเกอร์ เราจะเรียกใช้ดีบักเกอร์อีกครั้ง
พูดดีบักเกอร์ เริ่มต้น ดำเนินการต่อ
และเมื่อเราถึงจุดพักหลังจากป้อนข้อมูลภายในฟังก์ชั่นแล้ว คุณจะเห็นกองรถมีหลักและพิมพ์เหมือนกับที่เราแสดงก่อนหน้านี้
ดังนั้นคุณจึงเห็นฟังก์ชันล่าสุดที่ถูกเรียกใช้ในตอนนี้ด้วยโปรแกรมที่มีฟังก์ชันมากมาย
เป็นต้น call stack อาจมีขนาดใหญ่กว่านี้มาก
สิ่งเดียวที่อาจสำคัญคือเบรกพอยต์
หากคุณต้องการดูว่าเบรกพอยต์ใดที่คุณตั้งไว้ ระบบจะแสดงเบรกพอยต์ทั้งหมดและโปรแกรมทั้งหมดของคุณที่ตำแหน่งเบรกพอยต์
แต่คุณจะต้องทดลองกับสิ่งนี้ ทำความคุ้นเคย ทำความคุ้นเคยกับมัน และใช้มันค่อนข้างบ่อยสำหรับปัญหาที่คุณไม่สามารถเข้าใจได้ด้วยเทคนิคหรือโปรแกรมพื้นฐานในการดีบัก
ชนไปทีละบรรทัด
และเมื่อคุณไปทีละบรรทัด คุณจะเห็นการออกจากโปรแกรมเมื่อมันหยุดทำงาน
และคุณจะรู้ว่าบรรทัดใดเกิดขึ้น
นี่เป็นโปรแกรมขนาดเล็ก แต่คุณควรมีความเข้าใจพื้นฐานเกี่ยวกับวิธีการทำงานของการดีบัก
ฉันหวังว่านี่จะเป็นประโยชน์อีกครั้ง
วิธีที่ดีที่สุดในการเรียนรู้สิ่งนี้คือการเริ่มเล่นกับมันและเริ่มใช้มัน
นำเสนอหนึ่งในโปรแกรมที่คุณเคยทำงานในความท้าทายครั้งก่อน
เพิ่มจุดพัก ง่ายมาก
เพียงคลิกขวาภายในสิ่งนั้นเพื่อเพิ่มจุดพัก
เริ่มต้นใช้งานในโหมดแก้ไขจุดบกพร่องและก้าวผ่านแต่ละบรรทัด และดูว่าตัวแปรเปลี่ยนแปลงอย่างไรและ Call
Stack เพิ่มขึ้นอย่างไร
หากคุณมีฟังก์ชั่นที่ใหญ่กว่า
ขอบคุณ