1 00:00:00,000 --> 00:00:00,309 2 00:00:00,309 --> 00:00:02,350 [? DAN ARMADARAS:?] สวัสดี ฉัน [? แดน Armadaras?] 3 00:00:02,350 --> 00:00:04,410 วันนี้เรากำลังจะไป จะมองที่การแก้จุดบกพร่อง 4 00:00:04,410 --> 00:00:06,697 เราไม่เพียง แต่จะไป พูดคุยเกี่ยวกับเทคนิคบางอย่าง 5 00:00:06,697 --> 00:00:09,280 แต่ยังเรากำลังจะไปดูที่ บางส่วนของคุณสมบัติที่มีอยู่ 6 00:00:09,280 --> 00:00:14,170 ภายใน IDE CS50 ที่ช่วยให้ คุณสามารถแก้ปัญหาโปรแกรม 7 00:00:14,170 --> 00:00:16,272 >> เพียงตัวอย่างหนึ่งของ บางสิ่งบางอย่างที่ผิดไป 8 00:00:16,272 --> 00:00:18,730 และมันก็เป็นจริงอย่างที่ ที่เราได้เห็นแล้วก่อน 9 00:00:18,730 --> 00:00:23,200 ในกรณีนี้เป็นโปรแกรม C ที่ยอมรับจำนวนเต็มจากผู้ใช้ 10 00:00:23,200 --> 00:00:27,580 หารสองและให้ การส่งออกกลับมาให้กับผู้ใช้ 11 00:00:27,580 --> 00:00:30,610 ตอนนี้จากสิ่งที่เราได้เห็น ก่อนหน้านี้ในการบรรยาย 12 00:00:30,610 --> 00:00:34,370 เรารู้ว่านี้จริงจะทำให้เกิด เฉพาะประเภทของปัญหาส่วน 13 00:00:34,370 --> 00:00:35,860 เมื่อเรามีเลขคี่ 14 00:00:35,860 --> 00:00:40,330 >> โดยเฉพาะเราก็จะโยนออกไป อะไรหลังจุดทศนิยม 15 00:00:40,330 --> 00:00:43,170 ตอนนี้เรารู้ว่านี้ ที่จะเกิดขึ้นในกรณีที่ 16 00:00:43,170 --> 00:00:47,430 และถ้าเราใช้มันเราสามารถยืนยันได้ ข้อสงสัยของเราครั้งแรกโดยการรวบรวม 17 00:00:47,430 --> 00:00:50,460 แล้วโดยการทำงานและ เข้ามาเป็นเลขคี่ 18 00:00:50,460 --> 00:00:51,720 >> นี้จะไม่มีอะไรใหม่ 19 00:00:51,720 --> 00:00:54,490 แต่นี้เป็นจริง ตัวอย่างของข้อผิดพลาดที่ 20 00:00:54,490 --> 00:00:58,810 สามารถอยู่ในโปรแกรมที่มีขนาดใหญ่ ที่จะกลายเป็นเรื่องยากที่จะติดตาม 21 00:00:58,810 --> 00:01:02,640 แม้ว่าเราจะรู้ว่าสิ่งที่ปัญหา คือปมที่แท้จริงของเรื่องนี้ 22 00:01:02,640 --> 00:01:06,250 อาจจะมีการพยายามที่จะระบุ โดยเฉพาะข้อผิดพลาดที่เกิดขึ้น 23 00:01:06,250 --> 00:01:09,750 ระบุสิ่งที่เป็นปัญหาที่ เป็นแล้วแก้ไขมัน 24 00:01:09,750 --> 00:01:14,400 ดังนั้นให้นี้เป็นตัวอย่าง ของสิ่งที่อาจจะเป็นสิ่งที่ 25 00:01:14,400 --> 00:01:19,030 ที่เรารู้อยู่แล้วว่า แต่สามารถฝัง ภายในองค์ประกอบอื่น ๆ ของรหัส 26 00:01:19,030 --> 00:01:23,090 >> ดังนั้นการเปิดแหล่งอื่น ๆ แฟ้มรหัสเป็นตัวอย่าง 27 00:01:23,090 --> 00:01:27,165 ส่วนปัญหาที่เกิดขึ้นตอนนี้ ส่วนหนึ่งของโครงการขนาดใหญ่ 28 00:01:27,165 --> 00:01:29,040 ยังอาจจะมีเล็ก ๆ น้อย ๆ บิต contrived และเรา 29 00:01:29,040 --> 00:01:31,076 อาจจะสามารถได้อย่างง่ายดาย ระบุได้โดยเฉพาะอย่างยิ่ง 30 00:01:31,076 --> 00:01:32,450 เนื่องจากเรากำลังคุยกันเรื่องนี้ 31 00:01:32,450 --> 00:01:38,250 แต่เราสามารถคิดออกว่านี้ ปัญหาที่เกิดขึ้นสามารถอยู่ในระดับขนาดใหญ่ 32 00:01:38,250 --> 00:01:45,450 >> ถ้าฉันรวบรวมนี้และในขณะนี้ เรียกใช้ใส่เป็นเลขคี่, 33 00:01:45,450 --> 00:01:49,816 เราจะเห็นว่าเราไม่ได้รับได้อย่างแม่นยำ การส่งออกที่เราอาจจะคาดว่า 34 00:01:49,816 --> 00:01:51,690 ในกรณีนี้โดยเฉพาะ เราอาจจะพูดได้ว่าเรา 35 00:01:51,690 --> 00:01:56,060 ต้องการนับทั้งหมดของตัวเลข จากที่หนึ่งไปถึงบางส่วนจำนวนเฉพาะ 36 00:01:56,060 --> 00:01:58,130 และเราจะเห็นว่าเรา มีความหลากหลายของปัญหา 37 00:01:58,130 --> 00:02:03,880 นี่ถ้าเรากำลังแสดงผลเพียง 0 1 และเมื่อเราให้การป้อนข้อมูลของ 5 38 00:02:03,880 --> 00:02:07,380 >> ดังนั้นเรารู้อยู่แล้วว่า มีปัญหาที่นี่ 39 00:02:07,380 --> 00:02:11,662 แต่เราไม่อาจรู้ได้อย่างแม่นยำ ซึ่งปัญหานี้มีอยู่จริง 40 00:02:11,662 --> 00:02:13,620 ตอนนี้หนึ่งในวิธีการที่ เราสามารถพยายามที่จะแก้ไขปัญหานี้ 41 00:02:13,620 --> 00:02:15,745 เป็นสิ่งที่เราได้ รับการแนะนำแล้ว 42 00:02:15,745 --> 00:02:18,880 เราก็สามารถใช้งานได้ในระดับขนาดใหญ่ 43 00:02:18,880 --> 00:02:21,680 >> On line ที่ 14 เรามี ฟังก์ชั่น printf นี้ 44 00:02:21,680 --> 00:02:25,620 ซึ่งช่วยให้เราสามารถพิมพ์ออกมารัฐ ของชิ้นส่วนต่างๆของข้อมูล 45 00:02:25,620 --> 00:02:28,880 และนี่คือสิ่งที่คุณ ควรใช้ประโยชน์จากภายในโปรแกรมของคุณ 46 00:02:28,880 --> 00:02:33,100 เพื่อพยายามที่จะคิดออกว่าสิ่งที่ ที่เกิดขึ้นในสายต่างๆของโค้ด 47 00:02:33,100 --> 00:02:36,350 ดังนั้นแม้ว่านี้ไม่ได้เป็น ผลลัพธ์สุดท้ายที่เราจริง 48 00:02:36,350 --> 00:02:39,830 ต้องการที่จะผลิตออกมาจาก โปรแกรมนี้เรายังคง 49 00:02:39,830 --> 00:02:42,300 อาจจะมีการแก้ปัญหาบางอย่าง งบที่เรา 50 00:02:42,300 --> 00:02:46,970 สามารถพยายามที่จะคิดออกสิ่งที่แม่นยำ ที่เกิดขึ้นภายในของรหัสของเรา 51 00:02:46,970 --> 00:02:51,210 >> ดังนั้นในกรณีนี้ผมจะ printf ที่มีแท็กการแก้ปัญหา 52 00:02:51,210 --> 00:02:53,540 ในกรณีนี้เป็น เพียงสตริงการแก้ปัญหา 53 00:02:53,540 --> 00:02:56,840 ว่าฉันขึ้นมาวางเพื่อที่มันจะกลายเป็น ชัดเจนมากในการส่งออกของรหัสของฉัน 54 00:02:56,840 --> 00:02:59,200 อะไรคือสิ่งที่ฉันต้องการแสดง 55 00:02:59,200 --> 00:03:04,410 และการส่งออกที่นี่จำนวน ที่เราได้คำนวณ 56 00:03:04,410 --> 00:03:06,800 >> ในกรณีนี้ฉันอาจ ต้องการที่จะรู้ได้อย่างแม่นยำ 57 00:03:06,800 --> 00:03:11,380 สิ่งที่เกิดขึ้นก่อนและ หลังจากที่มีการคำนวณที่เฉพาะเจาะจง 58 00:03:11,380 --> 00:03:16,224 ดังนั้นผมจึงอาจใช้ printf ก่อน และหลังจากบรรทัดของรหัสที่ 59 00:03:16,224 --> 00:03:18,640 ในกรณีนี้ที่ฉันสามารถทำได้แม้กระทั่ง ทำให้มันเป็นที่ชัดเจนนิด ๆ หน่อย ๆ 60 00:03:18,640 --> 00:03:21,960 โดยการแก้ปัญหาก่อนที่จะบอกว่า และการแก้ปัญหาเพื่อให้หลัง 61 00:03:21,960 --> 00:03:26,540 ที่ฉันไม่สร้างความสับสนให้กับตัวเอง หลายสายที่มีลักษณะเหมือนกัน 62 00:03:26,540 --> 00:03:32,290 >> ตอนนี้ถ้าเรา recompile นี้และเรียกใช้ มันใส่หมายเลขเช่นห้าอีกครั้ง 63 00:03:32,290 --> 00:03:35,090 เราจะเห็นว่าเรามี ขณะนี้การส่งออกก่อนและหลัง 64 00:03:35,090 --> 00:03:40,670 และพบว่าเรายังไม่ได้ทำที่ชัดเจน ส่วนที่ชัดเจนหรือมีจำนวน 65 00:03:40,670 --> 00:03:43,680 ที่จริงเราต้องการที่จะทำ 66 00:03:43,680 --> 00:03:48,660 ตอนนี้ในกรณีนี้เป็น ไม่ได้จริงๆการส่งออกที่ชัดเจน 67 00:03:48,660 --> 00:03:52,440 มันไม่จริงผลที่ชัดเจนว่า เราต้องการออกจากโปรแกรมนี้โดยเฉพาะ 68 00:03:52,440 --> 00:03:54,427 >> และนี่คืออีกครั้ง นิด ๆ หน่อย ๆ ที่วางแผนไว้ 69 00:03:54,427 --> 00:03:57,510 แต่บางทีอาจจะเป็นหนึ่งในสิ่งที่ เราจะทำอย่างไรถ้าสเปคกล่าวว่า 70 00:03:57,510 --> 00:04:01,900 ว่าเราต้องการที่จะแบ่งนี้โดย 2 และเพิ่ม 1- ดังนั้นในคำอื่น ๆ 71 00:04:01,900 --> 00:04:04,550 เราต้องการที่จะรอบ up-- แล้ว เราอาจจะรู้ว่าเราสามารถทำได้ 72 00:04:04,550 --> 00:04:08,060 ทำสิ่งที่โดยเฉพาะอย่างยิ่งในกรณีนี้ 73 00:04:08,060 --> 00:04:14,010 ตอนนี้ที่นี่เรารู้ว่าเราจะได้รับ สามารถที่จะเพิ่มจำนวน 1 ถึงครึ่งของเรา 74 00:04:14,010 --> 00:04:16,490 >> ลองคอมไพล์นี้ และยืนยันว่าเรื่องนี้ 75 00:04:16,490 --> 00:04:18,860 มีพฤติกรรมทางที่เราต้องการไป 76 00:04:18,860 --> 00:04:21,980 เราจะเห็นว่าในขณะนี้ก่อน มีเรามีจำนวน 5 77 00:04:21,980 --> 00:04:26,620 หลังจากที่มีเรามีจำนวน 3, ซึ่งตามข้อกำหนดของเรา 78 00:04:26,620 --> 00:04:29,292 คือสิ่งที่เราอยากจะทำ 79 00:04:29,292 --> 00:04:31,000 แต่ถ้าเรามองไปที่ การส่งออกที่นี่เราสามารถ 80 00:04:31,000 --> 00:04:33,760 เห็นว่าเราอาจจะมีอีก ข้อผิดพลาดโดยสิ้นเชิงซึ่งเป็น 81 00:04:33,760 --> 00:04:36,940 ที่เราจะเริ่มต้นนับจาก 0 82 00:04:36,940 --> 00:04:39,390 >> ตอนนี้อีกครั้งนี้เป็นสิ่งที่ ที่เราได้เห็นในอดีตที่ผ่านมา 83 00:04:39,390 --> 00:04:42,500 และเราสามารถแก้ไขได้อย่างง่ายดายเลยทีเดียว 84 00:04:42,500 --> 00:04:44,790 แต่ในกรณีนี้เรา ยังมีประโยชน์ 85 00:04:44,790 --> 00:04:48,940 ของการใช้คำสั่ง printf โดยตรงภายในของห่วง 86 00:04:48,940 --> 00:04:52,930 ที่จะรู้อย่างแม่นยำที่ ข้อผิดพลาดที่เกิดขึ้น 87 00:04:52,930 --> 00:04:55,150 งบ printf ดังนั้น มีประโยชน์มากในการช่วย 88 00:04:55,150 --> 00:04:57,940 ให้คุณตรวจสอบที่ ได้อย่างแม่นยำในรหัสของคุณ 89 00:04:57,940 --> 00:05:00,620 ข้อผิดพลาดที่เกิดขึ้นโดยเฉพาะ 90 00:05:00,620 --> 00:05:03,650 >> และมันก็ยังเป็นสิ่งสำคัญที่จะตระหนักถึง ว่าในขณะที่เรากำลังเขียนรหัส 91 00:05:03,650 --> 00:05:06,052 เราอาจจะมีการตั้งสมมติฐาน เกี่ยวกับสถานะของโปรแกรม 92 00:05:06,052 --> 00:05:08,510 หรือเราอาจจะมีการตั้งสมมติฐาน เกี่ยวกับสิ่งที่เป็นส่วนหนึ่งของโปรแกรม 93 00:05:08,510 --> 00:05:13,020 เป็นจริงที่ถูกต้องหรือไม่ถูกต้องเมื่อ ต่อมาในขณะที่เราสร้างโปรแกรมที่ 94 00:05:13,020 --> 00:05:15,950 และทำให้มันเป็นส่วนหนึ่งของ โปรแกรมที่ซับซ้อนและมีขนาดใหญ่ 95 00:05:15,950 --> 00:05:19,700 ที่เรารู้ว่าบางแง่มุม ของที่เป็นจริงรถ 96 00:05:19,700 --> 00:05:22,680 >> ใช้ printf จริงๆสามารถช่วยให้ แคบลงและระบุ 97 00:05:22,680 --> 00:05:26,430 ภูมิภาคของโปรแกรมที่อาจจะไม่ เป็นพฤติกรรมตรงทางที่เรา 98 00:05:26,430 --> 00:05:29,500 คาดหวังตามสมมติฐานของเรา 99 00:05:29,500 --> 00:05:31,460 แต่มีเครื่องมืออื่น ๆ สามารถใช้งานได้เป็นอย่างดี 100 00:05:31,460 --> 00:05:34,860 ที่ช่วยให้เราพยายามที่จะร่าง ออกที่มีการเกิดขึ้นข้อผิดพลาด 101 00:05:34,860 --> 00:05:39,930 และโดยเฉพาะสิ่ง ที่จะเกิดขึ้นภายในของโปรแกรม 102 00:05:39,930 --> 00:05:41,990 >> ดังนั้นการใช้ printf เป็นอย่างมาก ที่มีประโยชน์เมื่อเราต้องการ 103 00:05:41,990 --> 00:05:45,900 เพื่อระบุพื้นที่ที่เฉพาะเจาะจงของ โปรแกรมที่มีข้อผิดพลาดบางอย่าง 104 00:05:45,900 --> 00:05:47,730 แต่มันก็จะกลายเป็น น่าเบื่อหลังจากที่ในขณะ 105 00:05:47,730 --> 00:05:50,500 ในกรณีนี้นี้เป็น โปรแกรมที่ค่อนข้างง่าย 106 00:05:50,500 --> 00:05:52,750 ที่มีเพียงหนึ่งหรือสองตัวแปร 107 00:05:52,750 --> 00:05:57,260 และมันก็กลายเป็นเรื่องง่ายมากที่เราจะ พิมพ์ค่าของตัวแปรเหล่านั้น 108 00:05:57,260 --> 00:05:59,670 ในบริบทของโครงการขนาดใหญ่ 109 00:05:59,670 --> 00:06:02,670 >> แต่เราอาจจะมีที่แตกต่างกัน โปรแกรมที่มีหลายตัวแปร 110 00:06:02,670 --> 00:06:06,530 และมันก็ไม่อาจจะค่อนข้าง เพื่อง่ายต่อการใช้ printf 111 00:06:06,530 --> 00:06:10,120 เพื่อพยายามที่จะประเมินสิ่งที่เกิดขึ้น แต่ละคนของตัวแปรเหล่านั้น 112 00:06:10,120 --> 00:06:13,590 เป็นโปรแกรมที่จะรัน 113 00:06:13,590 --> 00:06:16,960 มีโปรแกรมที่มีอยู่เป็น เรียกได้ว่าเป็นโปรแกรมดีบัก 114 00:06:16,960 --> 00:06:20,320 ในกรณีนี้คนที่เราจะ ใช้เป็นดีบัก GNU หรือ GDB, 115 00:06:20,320 --> 00:06:24,260 ที่ช่วยให้เราในการตรวจสอบภายใน การทำงานของโปรแกรมในมากขึ้น 116 00:06:24,260 --> 00:06:25,700 รายละเอียดทาง 117 00:06:25,700 --> 00:06:28,810 >> เราสามารถดำเนินการจริง GDB จากบรรทัดคำสั่ง 118 00:06:28,810 --> 00:06:35,370 ที่นี่โดยเพียงแค่พิมพ์ GDB และ คำสั่งที่เราต้องการที่จะแก้ปัญหา 119 00:06:35,370 --> 00:06:37,550 ในกรณีนี้นับ 120 00:06:37,550 --> 00:06:41,650 ตอนนี้ในกรณีนี้เราจะเห็นว่า นำเราไปพร้อมรับคำว่า GDB 121 00:06:41,650 --> 00:06:44,020 และที่เราสามารถทำได้จริง รันคำสั่งที่จะ GDB 122 00:06:44,020 --> 00:06:48,260 ที่จริงเริ่มต้นการดำเนินการของ โปรแกรมหยุดมันได้ในบางจุด, 123 00:06:48,260 --> 00:06:51,060 ประเมินตัวแปรและ ตรวจสอบตัวแปรที่ 124 00:06:51,060 --> 00:06:54,152 อยู่ในสถานะที่โปรแกรม โดยเฉพาะอย่างยิ่งในช่วงเวลานั้น 125 00:06:54,152 --> 00:06:55,110 และอื่น ๆ และอื่น ๆ. 126 00:06:55,110 --> 00:06:57,240 จะให้พลังงานมากถึงเรา 127 00:06:57,240 --> 00:06:59,960 >> แต่มันเกิดขึ้นเพียงเพื่อ ว่า IDE CS50 ยัง 128 00:06:59,960 --> 00:07:05,870 ให้ GUI หรือผู้ใช้ อินเตอร์เฟซสำหรับ GDB ที่ 129 00:07:05,870 --> 00:07:11,120 ช่วยให้เราสามารถทำเช่นนี้โดยไม่จำเป็นต้อง อินเตอร์เฟซบรรทัดคำสั่งใด ๆ 130 00:07:11,120 --> 00:07:13,560 หรือที่ทุกคนแม้กระทั่ง 131 00:07:13,560 --> 00:07:16,930 วิธีการที่ฉันสามารถเข้าถึงว่า โดยใช้ปุ่มแก้ปัญหา 132 00:07:16,930 --> 00:07:20,120 ที่ส่วนบนสุดของ CS50 IDE 133 00:07:20,120 --> 00:07:24,280 ตอนนี้ในอดีตที่ผ่านมาสิ่งที่เรามี เห็นคือการที่เราใช้คำสั่ง 134 00:07:24,280 --> 00:07:27,660 สายการรวบรวมและเรียกใช้โปรแกรม 135 00:07:27,660 --> 00:07:29,790 >> ปุ่มแก้ปัญหาไม่ได้ ทั้งสองขั้นตอนเหล่านั้น 136 00:07:29,790 --> 00:07:34,380 แต่มันก็ยังจะนำขึ้น แท็บดีบักบนขวาสุด 137 00:07:34,380 --> 00:07:38,280 ที่ช่วยให้เราในการตรวจสอบความหลากหลาย คุณสมบัติของโปรแกรม 138 00:07:38,280 --> 00:07:40,500 ตามที่มีการดำเนินการ 139 00:07:40,500 --> 00:07:44,280 ถ้าฉันคลิกแก้ปัญหาในเรื่องนี้ กรณีก็จะนำมาขึ้น 140 00:07:44,280 --> 00:07:48,230 แท็บใหม่ในคอนโซล หน้าต่างที่ด้านล่างสุด 141 00:07:48,230 --> 00:07:51,160 >> และคุณจะเห็นว่าแท็บนี้มี ข้อมูลบางอย่างที่ด้านบนสุด 142 00:07:51,160 --> 00:07:52,670 และเราส่วนใหญ่สามารถละเว้นนี้ 143 00:07:52,670 --> 00:07:54,800 แต่สิ่งหนึ่งที่ ว่าเราต้องการที่จะแจ้งให้ทราบล่วงหน้า 144 00:07:54,800 --> 00:07:57,170 คือว่ามันจะออกผลลัพธ์ สิ่งเดียวที่เรา 145 00:07:57,170 --> 00:08:03,000 จะได้รับถ้าเราพยายามที่จะทำงานให้ใน โปรแกรม C ในหน้าต่าง terminal 146 00:08:03,000 --> 00:08:06,230 >> ที่นี่เราจะเห็นมันทำงานเสียงดังกราว, และมันมีความหลากหลายของธงที่ 147 00:08:06,230 --> 00:08:12,660 และจะมีการรวบรวมไฟล์ count.c ของเรา ซึ่งเป็นแท็บที่เลือกในเวลานั้น 148 00:08:12,660 --> 00:08:15,100 ที่ผมตีแก้ปัญหา 149 00:08:15,100 --> 00:08:18,010 ดังนั้นนี้เป็นประโยชน์อย่างมากเพราะ ตอนนี้ใช้ปุ่มแก้ปัญหานี้ 150 00:08:18,010 --> 00:08:23,280 เราพร้อมกันสามารถรวบรวมแล้ว รันโปรแกรมที่เราจริง 151 00:08:23,280 --> 00:08:24,460 ต้องการเรียกใช้ 152 00:08:24,460 --> 00:08:27,880 >> หนึ่งในธงที่ สิ่งที่สำคัญในกรณีนี้ 153 00:08:27,880 --> 00:08:30,190 เราเคยใช้จริง เวลาที่ยาวที่สุด 154 00:08:30,190 --> 00:08:32,450 แต่ยังก็ไม่ได้มือบาง โบก [ไม่ได้ยิน] ซึ่ง 155 00:08:32,450 --> 00:08:33,820 เป็นหนึ่งที่เหมาะสมที่นี่ 156 00:08:33,820 --> 00:08:35,790 ในเสียงดังกราวมันบอกว่า -ggdb3 157 00:08:35,790 --> 00:08:38,570 158 00:08:38,570 --> 00:08:41,250 ในกรณีนี้สิ่งที่เราเป็น บอกเสียงดังกราวคอมไพเลอร์ของเรา 159 00:08:41,250 --> 00:08:43,820 คือการที่เราต้องการที่จะรวบรวมโปรแกรมของเรา 160 00:08:43,820 --> 00:08:46,810 แต่ยังมีสิ่งที่เป็น ข้อมูลที่เรียกว่าสัญลักษณ์ 161 00:08:46,810 --> 00:08:50,940 เพื่อให้คอมไพเลอร์จริงที่มีการเข้าถึง จำนวนมากของข้อมูลพื้นฐานที่ 162 00:08:50,940 --> 00:08:52,610 ที่มีอยู่ภายในโปรแกรม 163 00:08:52,610 --> 00:08:55,260 >> โดยเฉพาะอย่างยิ่งจำนวน ฟังก์ชั่นที่ฉันมี 164 00:08:55,260 --> 00:08:58,000 ชื่อของฟังก์ชั่นเหล่านั้น ตัวแปรประเภท 165 00:08:58,000 --> 00:09:01,730 ตัวแปรเหล่านี้และความหลากหลาย ของสิ่งอื่น ๆ ที่จะช่วยให้การดีบัก 166 00:09:01,730 --> 00:09:04,350 การดำเนินการของ 167 00:09:04,350 --> 00:09:06,600 ตอนนี้มีอย่างอื่น ที่สำคัญต้องพูดถึง 168 00:09:06,600 --> 00:09:10,280 เมื่อเรากำลังคุยกันเรื่องการทำงาน โปรแกรมในลักษณะนี้ 169 00:09:10,280 --> 00:09:13,660 >> ขอให้สังเกตว่ามันมีจริง นำขึ้นแท็บใหม่ในคอนโซลของเรา 170 00:09:13,660 --> 00:09:14,780 ด้านล่าง 171 00:09:14,780 --> 00:09:18,600 เราไม่ได้มีการโต้ตอบ โดยตรงกับหน้าต่าง terminal 172 00:09:18,600 --> 00:09:21,420 แต่แท็บใหม่นี้ จริงหน้าต่าง terminal 173 00:09:21,420 --> 00:09:26,710 มันก็เป็นเฉพาะกับการทำงาน โปรแกรมที่เราได้สร้างขึ้น 174 00:09:26,710 --> 00:09:29,270 >> ขอให้สังเกตว่าที่ด้านล่างใน ร่วมกับการส่งออกบางส่วน 175 00:09:29,270 --> 00:09:33,500 โดยเสียงดังกราวคอมไพเลอร์และ GDB, ส่วนใหญ่ที่เราสามารถละเว้น 176 00:09:33,500 --> 00:09:37,570 มันจริงแสดงให้เห็นว่าการส่งออกของ โปรแกรมของเราที่ด้านล่างสุด 177 00:09:37,570 --> 00:09:41,240 ตอนนี้มันเป็นสิ่งสำคัญที่จะตระหนักถึง ที่หน้าต่างนี้จริง 178 00:09:41,240 --> 00:09:43,360 จะแสดงให้คุณเห็น ผลลัพธ์จากโปรแกรมของคุณ 179 00:09:43,360 --> 00:09:47,190 แต่ยังสามารถรับข้อมูล สำหรับโปรแกรมที่รวมทั้ง 180 00:09:47,190 --> 00:09:49,260 >> ดังนั้นการแจ้งให้ทราบว่า กรุณาใส่ตัวเลข 181 00:09:49,260 --> 00:09:53,050 ซึ่งเป็นเอาท์พุทเดียวกับที่เรามี มีอยู่ในหน้าต่าง terminal ก่อน 182 00:09:53,050 --> 00:09:55,510 แต่มันก็แสดงให้เห็นในขณะนี้ในแท็บใหม่นี้ 183 00:09:55,510 --> 00:09:56,550 ฉันสามารถป้อนหมายเลข 184 00:09:56,550 --> 00:10:00,900 และมันจะเป็นจริง ฟังก์ชั่นในขณะที่เราคาดหวัง 185 00:10:00,900 --> 00:10:05,890 แสดงให้เราแก้ปัญหาของเราส่งออก การส่งออกที่อาจจะมีรถ, 186 00:10:05,890 --> 00:10:07,010 ในขณะที่เราเคยเห็นมาก่อน 187 00:10:07,010 --> 00:10:10,460 และที่ด้านล่างสุดมัน จริงมีบางส่วนการส่งออกที่เพิ่มขึ้น 188 00:10:10,460 --> 00:10:14,550 จากจีดีพีแค่บอกว่า โปรแกรมนี้ได้เสร็จสิ้น 189 00:10:14,550 --> 00:10:16,655 >> ตอนนี้เป็นคุณเห็นในเรื่องนี้ โดยเฉพาะอย่างยิ่งวิ่งผ่าน 190 00:10:16,655 --> 00:10:19,370 มันไม่ได้โดยเฉพาะอย่างยิ่ง เพราะแม้มีประโยชน์ 191 00:10:19,370 --> 00:10:23,740 แม้ว่าเราจะมีเมนูดีบักมา ขึ้นนี้ก็ยังคงเป็นโปรแกรมที่ทำงาน 192 00:10:23,740 --> 00:10:26,790 เมื่อมาถึงจุดที่ไม่ได้ก็จริง หยุดการดำเนินการสำหรับเรา 193 00:10:26,790 --> 00:10:30,767 เพื่อให้สามารถตรวจสอบทั้งหมดของ ตัวแปรที่มีอยู่ภายใน 194 00:10:30,767 --> 00:10:32,850 มีบางอย่างที่อื่น ที่เราต้องทำในการสั่งซื้อ 195 00:10:32,850 --> 00:10:36,910 ที่จะได้รับ GDB ที่จะรับรู้ว่าเราต้องการ เพื่อหยุดการทำงานของโปรแกรม 196 00:10:36,910 --> 00:10:42,820 และไม่เพียง แต่อนุญาตให้ดำเนินการต่อไป ปกติเราจะเป็นในกรณีอื่น ๆ 197 00:10:42,820 --> 00:10:45,530 >> เพื่อที่จะหยุดการดำเนินการ สายเฉพาะที่บาง 198 00:10:45,530 --> 00:10:47,830 เราต้องสร้างสิ่งที่ เรียกว่าจุดพัก 199 00:10:47,830 --> 00:10:52,670 และจุดพักจะถูกสร้างขึ้นได้อย่างง่ายดายมาก ใน CS50 นี้ IDE โดยการใช้เมาส์ของคุณ 200 00:10:52,670 --> 00:10:57,090 และคลิกตรงไปทางซ้าย บางหมายเลขบรรทัดที่เฉพาะเจาะจง 201 00:10:57,090 --> 00:10:59,920 เมื่อฉันทำอย่างนั้นจุดสีแดง ปรากฏซึ่งบ่งชี้ 202 00:10:59,920 --> 00:11:02,300 ว่าสายที่ตอนนี้จุดพัก 203 00:11:02,300 --> 00:11:07,540 >> และในครั้งต่อไปที่ผมทำงาน GDB มัน จะหยุดการดำเนินการที่จุดพักที่ 204 00:11:07,540 --> 00:11:10,280 เมื่อมันมาถึงบรรทัดของรหัสที่ 205 00:11:10,280 --> 00:11:12,230 ตอนนี้เป็นสิ่งที่สำคัญ สิ่งที่จะต้องตระหนักถึง 206 00:11:12,230 --> 00:11:16,140 ว่ามันไม่จำเป็นต้องเป็น กรณีที่ว่าทุกบรรทัดของรหัส 207 00:11:16,140 --> 00:11:17,880 สามารถเข้าถึงได้จริง 208 00:11:17,880 --> 00:11:23,780 ถ้าฉันจะสร้างฟังก์ชั่น ขึ้นที่นี่สำหรับ example-- โมฆะ f-- 209 00:11:23,780 --> 00:11:31,230 และเพียงแค่ทำเส้นพิมพ์ here-- สวัสดี world-- ถ้าฉันไม่เคยเรียกใช้ฟังก์ชันนี้ 210 00:11:31,230 --> 00:11:34,770 มันจะเป็นกรณีที่ ถ้าฉันจะตั้งจุดพักที่นี่ 211 00:11:34,770 --> 00:11:36,220 ฟังก์ชั่นจะไม่ถูกเรียกว่า 212 00:11:36,220 --> 00:11:38,310 ดังนั้นนี้ จุดพักโดยเฉพาะอย่างยิ่ง 213 00:11:38,310 --> 00:11:43,040 จะไม่เคยหยุด การทำงานของโปรแกรม 214 00:11:43,040 --> 00:11:48,020 >> ดังนั้นขอบอกว่าผมสร้างอย่างถูกต้อง จุดพักอยู่บนเส้นบางส่วนของรหัส 215 00:11:48,020 --> 00:11:50,340 ที่จริงจะต้องถูกประหารชีวิต 216 00:11:50,340 --> 00:11:53,470 ตอนนี้ในที่นี้คือ บรรทัดแรกในฟังก์ชั่นหลัก 217 00:11:53,470 --> 00:11:56,630 ดังนั้นแน่นอนมันจะเป็นกรณี ที่เร็วที่สุดเท่าที่ฉันจะเริ่มต้นการดำเนินการ 218 00:11:56,630 --> 00:11:58,580 บรรทัดแรกจะถึง 219 00:11:58,580 --> 00:12:00,230 GDB จะหยุดการดำเนินการ 220 00:12:00,230 --> 00:12:04,100 แล้วฉันจะสามารถที่จะ โต้ตอบกับดีบัก 221 00:12:04,100 --> 00:12:08,480 >> คุณสามารถตั้งค่าเป็นหลายบรรทัด จุดพักถ้าคุณต้องการ 222 00:12:08,480 --> 00:12:11,365 นอกจากนี้เรายังสามารถสร้างเส้นขึ้น ที่นี่ในส่วนของรหัสนี้ 223 00:12:11,365 --> 00:12:12,490 ที่จะไม่มาถึง 224 00:12:12,490 --> 00:12:14,744 และเรายังสามารถตั้งค่าอย่างใดอย่างหนึ่งดังต่อไปนี้ 225 00:12:14,744 --> 00:12:16,660 ด้วยเหตุผลที่ว่าเราจะ ต้องการที่จะทำเช่นนี้เราจะ 226 00:12:16,660 --> 00:12:19,119 ไปเป็นนิด ๆ หน่อย ๆ รายละเอียดในการรอสักครู่ 227 00:12:19,119 --> 00:12:21,660 ดังนั้นตอนนี้ให้ฉันเพียงแค่ปิดการใช้งาน เหล่านี้จุดพักเพิ่มเติม 228 00:12:21,660 --> 00:12:24,940 เพื่อให้เราสามารถมองไปที่สิ่งที่เกิดขึ้น เมื่อฉันได้พักหนึ่งเดียว 229 00:12:24,940 --> 00:12:27,650 จุดในโปรแกรมของฉัน 230 00:12:27,650 --> 00:12:29,410 ผมได้ทำบางอย่าง การเปลี่ยนแปลงในโปรแกรมนี้ 231 00:12:29,410 --> 00:12:30,750 ดังนั้นผมจึงต้องการที่จะบันทึกไว้ 232 00:12:30,750 --> 00:12:34,490 ฉันจะคลิกแก้ปัญหาเพื่อที่ฉันสามารถ เริ่มต้นรวบรวมแล้ว 233 00:12:34,490 --> 00:12:36,880 การดำเนินการของการดีบัก 234 00:12:36,880 --> 00:12:40,632 >> เราจะเห็นว่าหลังจากช่วงเวลาที่ สายที่เราเลือกเป็นตัวแบ่ง 235 00:12:40,632 --> 00:12:43,360 จุดเน้นสีเหลือง 236 00:12:43,360 --> 00:12:47,440 นอกจากนี้เรายังสามารถสังเกตเห็นว่าใน ขวาบนแผงในการแก้ปัญหา 237 00:12:47,440 --> 00:12:50,940 ไอคอนหยุดชั่วคราวได้เปิด เป็นไอคอนเล่นเล็ก ๆ น้อย ๆ 238 00:12:50,940 --> 00:12:54,710 ซึ่งหมายความว่าเราต้องหยุดการทำงานชั่วคราว การดำเนินการในกรณีนี้โดยเฉพาะ 239 00:12:54,710 --> 00:12:57,840 และกดปุ่ม Play จะ ช่วยให้เราสามารถกลับมาดำเนินการ 240 00:12:57,840 --> 00:13:00,000 ที่จุดเฉพาะที่ 241 00:13:00,000 --> 00:13:03,240 >> ขอให้สังเกตว่ามีคู่ของอื่น ๆ ปุ่มที่มีอยู่ในแผงการแก้ปัญหานี้ 242 00:13:03,240 --> 00:13:04,220 ได้เป็นอย่างดี 243 00:13:04,220 --> 00:13:09,470 ขั้นตอนที่มากกว่าซึ่งช่วยให้ผม ดำเนินการที่หนึ่งบรรทัดของโค้ด 244 00:13:09,470 --> 00:13:14,030 และขั้นตอนไปยังสายที่ อย่างใดอย่างหนึ่งต่อไปซึ่งในกรณีนี้ 245 00:13:14,030 --> 00:13:17,060 จะหมายถึงว่า printf คำสั่งจะถูกดำเนินการ 246 00:13:17,060 --> 00:13:22,310 และมันก็จะหยุดการทำงานชั่วคราว การดำเนินการในบรรทัดที่ 13 เช่นดังนั้น 247 00:13:22,310 --> 00:13:25,090 >> และนอกจากนี้ยังมีขั้นตอน ในการทำงานที่ 248 00:13:25,090 --> 00:13:28,950 จะเป็นประโยชน์ถ้าฉันได้สร้างอื่น ๆ ฟังก์ชั่นอื่น ๆ ในรหัสที่มา 249 00:13:28,950 --> 00:13:31,420 และฉันต้องการที่จะก้าวเข้าสู่ ฟังก์ชั่นเหล่านั้นมากกว่า 250 00:13:31,420 --> 00:13:33,050 ดำเนินการฟังก์ชั่นที่เป็นทั้ง 251 00:13:33,050 --> 00:13:37,279 แต่เราจะดูเพิ่มเติมได้ที่ขั้นตอน ในการทำงานในเวลาเพียงสักครู่ 252 00:13:37,279 --> 00:13:40,320 ตอนนี้สังเกตเห็นบางสิ่งอื่น ๆ ที่ จริงมีอยู่ภายในแผงการแก้ปัญหานี้ 253 00:13:40,320 --> 00:13:44,110 >> เรามีแผงนี้เรียกว่า เรียกสแต็คซึ่งแสดงให้เราเห็น 254 00:13:44,110 --> 00:13:45,300 ที่ว่าเราอยู่ 255 00:13:45,300 --> 00:13:48,550 ในกรณีนี้เราอยู่ใน ฟังก์ชั่นหลัก 256 00:13:48,550 --> 00:13:50,880 สคริปต์ของเราที่เรียกว่า count.c 257 00:13:50,880 --> 00:13:53,820 และเราจะเกิดขึ้นใน สาย 13 คอลัมน์หนึ่งซึ่ง 258 00:13:53,820 --> 00:13:58,950 เป็นสิ่งที่เน้นภูมิภาค ของรหัสที่มาแสดงให้เห็นเป็นอย่างดี 259 00:13:58,950 --> 00:14:02,435 >> ตอนนี้สังเกตเห็นว่าเรื่องนี้ยังแสดงให้เห็น ภายใต้ส่วนตัวแปรท้องถิ่น 260 00:14:02,435 --> 00:14:06,710 ทั้งหมดของตัวแปรที่ มีอยู่ในฟังก์ชั่นนี้ 261 00:14:06,710 --> 00:14:08,930 มันเป็นสิ่งสำคัญที่จะต้องทราบ ว่าทั้งหมดของตัวแปร 262 00:14:08,930 --> 00:14:12,580 จะปรากฏในตัวแปรท้องถิ่นนี้ ส่วนภายในฟังก์ชั่น 263 00:14:12,580 --> 00:14:14,380 แม้กระทั่งก่อนที่พวกเขาจะมีการกำหนด 264 00:14:14,380 --> 00:14:19,160 เราจะเห็นได้ว่าที่นี่เรามีตัวแปร เรียกว่า NUM มีค่าเริ่มต้นของ 0, 265 00:14:19,160 --> 00:14:21,280 และมันก็เป็นชนิด int 266 00:14:21,280 --> 00:14:24,110 >> ตอนนี้ก่อนที่เราจะเริ่มต้นจริง ทั้งหมดของตัวแปรเหล่านี้ 267 00:14:24,110 --> 00:14:26,685 เราไม่จำเป็นต้อง รับประกันว่าจะเห็นค่าเป็น 0 268 00:14:26,685 --> 00:14:29,200 และขึ้นอยู่กับการประหารชีวิตอื่น ๆ ที่คุณได้ดำเนินการ 269 00:14:29,200 --> 00:14:32,020 และสถานะของหน่วยความจำของคุณเมื่อ คุณจริงเรียกใช้โปรแกรมนี้ 270 00:14:32,020 --> 00:14:34,605 คุณอาจพบว่าคุณ ไม่เห็นคุณค่าของ 0 271 00:14:34,605 --> 00:14:36,550 และแทนตัวเลขบางบ้าอื่น ๆ 272 00:14:36,550 --> 00:14:38,390 >> แต่ไม่ต้องกังวลเกี่ยวกับการที่ 273 00:14:38,390 --> 00:14:44,610 มันไม่ได้เป็นไปได้ที่เกี่ยวข้องจนกว่า คุณจริงเริ่มต้นค่า 274 00:14:44,610 --> 00:14:49,630 ตอนนี้ในกรณีนี้เราจะเห็นว่า ผมได้ดำเนินการบางอย่างเอาท์พุท 275 00:14:49,630 --> 00:14:52,131 และฉันตอนนี้การดำเนินการหยุดชั่วคราว 276 00:14:52,131 --> 00:14:53,880 แต่ในกรณีนี้สิ่งที่ ผมต้องการที่จะทำ 277 00:14:53,880 --> 00:14:58,060 ตอนนี้คือการก้าวข้ามบรรทัดนี้ รหัสเพื่อที่ฉันสามารถจริง 278 00:14:58,060 --> 00:15:04,390 สอบถามผู้ใช้สำหรับ int ว่า เราต้องการที่จะใช้ในโปรแกรมของเรา 279 00:15:04,390 --> 00:15:07,060 >> ตอนนี้ในกรณีนี้เมื่อ ฉันตีก้าวไปแจ้งให้ทราบล่วงหน้า 280 00:15:07,060 --> 00:15:11,940 ว่าหยุดชั่วคราวหรือค่อนข้างดำเนินการต่อ ปุ่มมีการเปลี่ยนแปลงให้กับปุ่มหยุดชั่วคราวนี้ 281 00:15:11,940 --> 00:15:14,022 เพราะรหัสนี้เป็นจริงการดำเนินการ 282 00:15:14,022 --> 00:15:15,730 เกิดอะไรขึ้น ตอนนี้ก็คือว่า 283 00:15:15,730 --> 00:15:21,630 รอให้เราใส่ข้อมูลบางอย่าง ในขณะที่เราสามารถมองเห็นได้ด้วยข้อความส่งออกของเรา 284 00:15:21,630 --> 00:15:23,600 ที่ด้านล่างสุด 285 00:15:23,600 --> 00:15:25,787 >> ดังนั้นตอนนี้นี้เป็น ไม่ได้หยุดชั่วคราวจริง 286 00:15:25,787 --> 00:15:28,620 แม้ว่ามันจะเรียงลำดับของปรากฏ จะเป็นเพราะไม่มีอะไรเกิดขึ้น 287 00:15:28,620 --> 00:15:32,360 แต่มันเกิดขึ้นเพียงเพื่อว่าใน กรณีเฉพาะของฉันในบรรทัดที่ 13 288 00:15:32,360 --> 00:15:34,210 ผมกำลังรอสำหรับการป้อนข้อมูลของผู้ใช้ 289 00:15:34,210 --> 00:15:39,130 และเพื่อ GDB จะไม่สามารถที่จะตรวจสอบ เป็นโปรแกรมที่มีการทำงาน 290 00:15:39,130 --> 00:15:43,370 >> ตอนนี้ในครั้งต่อไปที่ผมใส่บาง input-- ดังนั้นฉันจะป้อนหมายเลข 5 ที่ 291 00:15:43,370 --> 00:15:46,140 ที่เราได้เห็นใน past-- ตีกลับและเรา 292 00:15:46,140 --> 00:15:51,430 สังเกตเห็นว่าทันทีหยุด GDB และอีกครั้งไฮไลท์บรรทัดถัดไป 293 00:15:51,430 --> 00:15:55,320 แต่สังเกตเห็นว่าตอนนี้เป็น ผลมาจากการป้อนค่าของเรา 294 00:15:55,320 --> 00:15:58,930 เรามีการปรับปรุงค่าที่อยู่ภายใน ของตัวแปรในท้องถิ่นของเราที่ 295 00:15:58,930 --> 00:16:05,560 จะเป็นประโยชน์มากที่จะรู้ได้อย่างแม่นยำ สิ่งที่ตัวเลขที่อยู่ในหน่วยความจำ 296 00:16:05,560 --> 00:16:10,650 >> ตอนนี้ฉันสามารถช่วยให้โครงการนี​​้จะดำเนินการต่อ เล่นจนกว่าจะสิ้นสุดของการดำเนินการของ 297 00:16:10,650 --> 00:16:12,570 โดยการกดปุ่ม Resume 298 00:16:12,570 --> 00:16:16,410 เราจะเห็นว่าอย่างรวดเร็ว โปรแกรมจะเสร็จสิ้นการดำเนินการ 299 00:16:16,410 --> 00:16:19,790 กับการส่งออกเหมือนกันว่าเรา ก่อนที่จะมีการดีบักปิด 300 00:16:19,790 --> 00:16:23,170 และตอนนี้โปรแกรมนี้ ได้หยุดอย่างสมบูรณ์ 301 00:16:23,170 --> 00:16:25,320 >> ผมแสดงให้เห็นว่าเฉพาะสำหรับ วัตถุประสงค์ของการเห็นสิ่งที่ 302 00:16:25,320 --> 00:16:27,280 ที่เกิดขึ้นเมื่อเราจริงตีประวัติผู้สมัครงาน 303 00:16:27,280 --> 00:16:30,640 แต่เราจริงจะไป ต้องการที่จะกลับเข้าสู่โปรแกรมนี้ 304 00:16:30,640 --> 00:16:33,820 เพื่อให้เราสามารถพยายามที่จะแก้ปัญหา สิ่งที่เกิดขึ้น 305 00:16:33,820 --> 00:16:37,980 ตอนนี้ที่ฉันใช้ดีบักผมอาจ ไม่จำเป็นต้องใช้งบแก้ปัญหาเหล​​่านี้ printf 306 00:16:37,980 --> 00:16:43,860 >> ดังนั้นฉันจะเอาพวกเขาเท่าที่ฉันจะทำ ขณะนี้เป็นเพียงที่จะกลับไปง่ายรหัสของเรา 307 00:16:43,860 --> 00:16:45,950 ที่เรามีช่วงเวลาที่ผ่านมา 308 00:16:45,950 --> 00:16:48,790 ตอนนี้เมื่อฉันบันทึก โปรแกรมและดำเนินการนั้น 309 00:16:48,790 --> 00:16:53,700 มันจะอีกครั้งไปเริ่มต้นที่ ทำลายจุดที่ฉันมีอยู่บนเส้น 11 310 00:16:53,700 --> 00:16:57,700 และผมก็จะสามารถที่จะตรวจสอบ ตัวแปรของฉันเป็นฉันต้องการจะทำ 311 00:16:57,700 --> 00:17:00,695 >> มันเกิดขึ้นเพียงเพื่อที่ว่านี้ ส่วนที่ไม่ได้เป็นที่น่าสนใจมาก 312 00:17:00,695 --> 00:17:04,364 และฉันรู้ว่าฉันจะ ที่จะพิมพ์ออกคำสั่งนี้ 313 00:17:04,364 --> 00:17:05,280 กรุณากรอกตัวเลข 314 00:17:05,280 --> 00:17:08,099 แล้วฉันรู้ว่าฉันจะ ที่จะขอให้ผู้ใช้สำหรับจำนวนเต็มที่ 315 00:17:08,099 --> 00:17:13,329 ดังนั้นบางทีที่จริงผมต้องการที่จะย้ายของฉัน ทำลายจุดนิด ๆ หน่อย ๆ ต่อไปลง 316 00:17:13,329 --> 00:17:16,710 >> คุณสามารถลบจุดพัก โดยการคลิกอีกครั้งโดยตรง 317 00:17:16,710 --> 00:17:18,460 ด้านซ้ายของหมายเลขบรรทัดว่า 318 00:17:18,460 --> 00:17:22,200 ที่จุดสีแดงจะหายไปแสดงให้เห็น ที่จุดพักที่ไปตอนนี้ 319 00:17:22,200 --> 00:17:24,780 ตอนนี้ในกรณีนี้ การดำเนินการถูกหยุดชั่วคราว 320 00:17:24,780 --> 00:17:27,770 และดังนั้นจึงไม่จริงไป กลับมาโดยเฉพาะอย่างยิ่งในกรณีที่ 321 00:17:27,770 --> 00:17:30,210 แต่ผมก็สามารถตั้งค่าการหยุดพัก ชี้ให้นิด ๆ หน่อย ๆ ในภายหลัง 322 00:17:30,210 --> 00:17:33,880 >> และเมื่อตอนนี้ผมกลับมาของฉัน รหัสก็จะกลับมาและบอก 323 00:17:33,880 --> 00:17:36,190 จุดจุดพักที่ 324 00:17:36,190 --> 00:17:37,374 อีกครั้งผมตีประวัติผู้สมัครงาน 325 00:17:37,374 --> 00:17:39,040 ดูเหมือนจะไม่เหมือนกับสิ่งที่เกิดขึ้น 326 00:17:39,040 --> 00:17:41,450 แต่นั่นเป็นเพราะฉัน รหัสคือการรอคอยสำหรับการป้อนข้อมูล 327 00:17:41,450 --> 00:17:47,900 ผมจะใส่หมายเลข 5, กด Enter และ ตอนนี้จุดพักต่อไปจะได้รับผลกระทบ 328 00:17:47,900 --> 00:17:50,570 >> ตอนนี้ในที่นี้ เป็นสายของรหัส 329 00:17:50,570 --> 00:17:53,820 ว่าก่อนที่เรารู้ว่า เกิดขึ้นจะเป็นรถ 330 00:17:53,820 --> 00:17:57,590 ดังนั้นขอประเมินสิ่งที่เกิดขึ้น ที่จุดโดยเฉพาะอย่างยิ่งในเวลานี้ 331 00:17:57,590 --> 00:18:02,620 เมื่อมีการเน้นเส้นนี้ สายยังไม่ได้รับการดำเนินการ 332 00:18:02,620 --> 00:18:06,490 ดังนั้นในกรณีนี้เราสามารถมองเห็น ที่ฉันมีจำนวนที่ 333 00:18:06,490 --> 00:18:11,610 ฉันมีจำนวนเต็มเรียกว่า NUM ที่มีค่า 5 334 00:18:11,610 --> 00:18:15,090 และฉันจะได้รับการปฏิบัติ คณิตศาสตร์บางอย่างเกี่ยวกับตัวเลขที่ 335 00:18:15,090 --> 00:18:20,130 >> ถ้าผมก้าวข้ามที่เราสามารถ สังเกตเห็นว่าค่าสำหรับค่า num 336 00:18:20,130 --> 00:18:23,780 มีการเปลี่ยนแปลงให้สอดคล้องกับ คณิตศาสตร์ที่เราได้ทำจริง 337 00:18:23,780 --> 00:18:26,810 และตอนนี้ที่เราอยู่ ด้านในของวงนี้ 338 00:18:26,810 --> 00:18:29,090 หรือตอนนี้ที่ห่วง ตัวเองเป็นไฮไลต์ 339 00:18:29,090 --> 00:18:32,450 เราจะเห็นว่าเรามีใหม่ ตัวแปรเรียกฉันว่า 340 00:18:32,450 --> 00:18:35,370 เป็นไปได้ในการที่ใช้สำหรับวง 341 00:18:35,370 --> 00:18:38,230 >> ตอนนี้ก่อนที่ผมจะจำได้ว่า กล่าวถึงว่าบางครั้งคุณ 342 00:18:38,230 --> 00:18:43,470 จะไปดูชนิดของบางบ้า ตัวเลขที่เป็นค่าเริ่มต้นก่อนที่ตัวเลขที่ 343 00:18:43,470 --> 00:18:45,530 หรือตัวแปรที่เป็น เริ่มต้นได้จริง 344 00:18:45,530 --> 00:18:49,040 เราจะเห็นว่าอย่างแม่นยำ ที่นี่ในตัวแปรนี้ 345 00:18:49,040 --> 00:18:51,345 เรียกว่าผมซึ่งไม่ได้ ได้รับการเริ่มต้น 346 00:18:51,345 --> 00:18:53,560 ในช่วงเวลาของการเน้น 347 00:18:53,560 --> 00:18:57,070 แต่เราจะเห็นว่ามันมีบางจำนวน ว่าเราจะไม่คาดหวังจริง 348 00:18:57,070 --> 00:18:57,620 >> มันโอเค. 349 00:18:57,620 --> 00:18:59,661 ไม่ต้องเป็นห่วงนะ เพราะเรามีไม่จริง 350 00:18:59,661 --> 00:19:04,970 เริ่มต้นได้ตัวเลขที่จนกว่าฉัน ก้าวข้ามเส้นและความคุ้มค่า 351 00:19:04,970 --> 00:19:08,560 ฉันได้รับการเริ่มต้นได้ที่ค่า 1 352 00:19:08,560 --> 00:19:11,400 ดังนั้นจะเห็นว่าที่จริง กรณีที่ขอให้ก้าวข้าม 353 00:19:11,400 --> 00:19:14,420 ตอนนี้เราจะเห็นว่าที่ สายที่ได้รับการดำเนินการ 354 00:19:14,420 --> 00:19:17,000 และตอนนี้เรากำลังไฮไลท์ สาย printf นี้ 355 00:19:17,000 --> 00:19:22,230 >> และตอนนี้เราจะเห็นได้ว่าค่านิยมของเรา ของฉันและ 3 ที่มีการเปลี่ยนแปลงอยู่ตลอดเวลา 356 00:19:22,230 --> 00:19:26,450 นี้จะเป็นประโยชน์มากที่จะทำในความเป็นจริง คือการก้าวข้ามเส้นที่ซ้ำแล้วซ้ำอีก 357 00:19:26,450 --> 00:19:30,480 และคุณสามารถค้นหาสิ่งที่จริง ที่เกิดขึ้นภายในของสำหรับวงของคุณ 358 00:19:30,480 --> 00:19:33,660 และสิ่งที่เกิดขึ้นกับ ตัวแปรภายในที่สำหรับวง 359 00:19:33,660 --> 00:19:39,200 ขณะที่การทำงานของโปรแกรมที่ ขั้นตอนที่เกิดขึ้นในช่วงเวลาหนึ่ง 360 00:19:39,200 --> 00:19:41,110 >> ตอนนี้ที่จุดนี้ผม ก้าวเหนือพอเพียง 361 00:19:41,110 --> 00:19:44,210 ที่ตอนนี้ผมรู้สึกในตอนท้ายของโปรแกรมของฉัน 362 00:19:44,210 --> 00:19:46,980 ถ้าผมก้าวข้ามว่ามันจะ ยุติการดำเนินการจริง 363 00:19:46,980 --> 00:19:48,860 ในขณะที่เราได้เห็นในอดีตที่ผ่านมา 364 00:19:48,860 --> 00:19:52,110 ผมขอเริ่มต้นใหม่นี้อีกครั้งเพื่อ ที่ฉันสามารถชี้อย่างอื่นออก 365 00:19:52,110 --> 00:19:53,320 ได้เป็นอย่างดี 366 00:19:53,320 --> 00:19:55,350 >> ในกรณีนี้ก็คือ ตอนนี้ขอให้ฉันอีกครั้ง 367 00:19:55,350 --> 00:19:57,100 สำหรับหมายเลขที่ ผมจะอีกครั้งใส่ 368 00:19:57,100 --> 00:20:00,300 แต่ครั้งนี้ผมจะใส่ใน เป็นจำนวนมากเพื่อให้ห่วง 369 00:20:00,300 --> 00:20:02,540 จะย้ำอีกครั้ง 370 00:20:02,540 --> 00:20:06,090 ในกรณีนี้ผมจะ ป้อนค่าของ 11 371 00:20:06,090 --> 00:20:08,390 >> ตอนนี้อีกครั้งเพราะฉันตั้ง จุดพักที่บรรทัดที่ 15 372 00:20:08,390 --> 00:20:10,490 มันจะเน้นที่สาย 373 00:20:10,490 --> 00:20:12,980 เราจะเห็นว่าของเรา หมายเลข 11 อย่างถูกต้อง 374 00:20:12,980 --> 00:20:15,560 ตัวแทนในตัวแปรท้องถิ่นของเรา 375 00:20:15,560 --> 00:20:22,460 ก้าวเหนือว่าตอนนี้เราสามารถ ดูสิ่งที่เกิดขึ้นกับค่าของฉัน 376 00:20:22,460 --> 00:20:25,680 ในขณะที่เราดำเนินการภายในของวงนี้ 377 00:20:25,680 --> 00:20:31,960 จะได้รับเพิ่มขึ้นทุกครั้งที่เรา ถึงด้านบนของที่ห่วง 378 00:20:31,960 --> 00:20:35,110 >> ตอนนี้หนึ่งในสิ่งที่อาจจะ เป็นประโยชน์ที่จะทำในระหว่างการดำเนิน 379 00:20:35,110 --> 00:20:40,490 ของโปรแกรมนี้คือสำหรับผมที่จะเป็นจริง เปลี่ยนตัวแปรกลางแม่น้ำที่จะเห็น 380 00:20:40,490 --> 00:20:42,450 เกิดอะไรขึ้นกับโปรแกรมของฉัน 381 00:20:42,450 --> 00:20:46,540 ในกรณีนี้ที่จริงผมสามารถ ดับเบิลคลิกค่า 382 00:20:46,540 --> 00:20:48,040 ขอให้สังเกตว่ามันจะกลายเป็นช่องข้อความ 383 00:20:48,040 --> 00:20:50,280 >> ตอนนี้ฉันสามารถใส่ที่แตกต่างกัน ค่าโดยสิ้นเชิง 384 00:20:50,280 --> 00:20:55,700 เพื่อดูว่าโปรแกรมของฉันทำงาน เมื่อฉันได้เปลี่ยนตัวแปรที่ 385 00:20:55,700 --> 00:20:59,560 ตอนนี้ในกรณีนี้ตัวแปร ตอนนี้ผมมีค่า 10 386 00:20:59,560 --> 00:21:02,810 แต่โปรแกรมยังคง หยุดชั่วคราวในการดำเนินการ 387 00:21:02,810 --> 00:21:07,610 เมื่อผมก้าวข้ามผมเห็นว่า ฉันค่าที่ฉันป้อนเป็น 10 388 00:21:07,610 --> 00:21:12,170 ไม่เกินมูลค่าของ NUM ที่ ซึ่งทันทีทำให้ห่วง 389 00:21:12,170 --> 00:21:14,240 ที่จะหยุดการดำเนินการ 390 00:21:14,240 --> 00:21:16,210 >> ตอนนี้ที่ไม่ได้เป็นเพียง เหตุผลที่คุณจะ 391 00:21:16,210 --> 00:21:19,450 ต้องการปรับเปลี่ยนตัวแปรในสถานที่ 392 00:21:19,450 --> 00:21:22,210 จริงๆคุณอาจต้องการ เพื่อพยายามที่จะปรับเปลี่ยนเพื่อให้ 393 00:21:22,210 --> 00:21:24,590 ที่คุณสามารถดำเนินการต่อไป การดำเนินการของวง 394 00:21:24,590 --> 00:21:27,370 หรือเพื่อให้คุณสามารถปรับเปลี่ยน ค่าก่อนที่มันบาง 395 00:21:27,370 --> 00:21:32,630 ถึงบางชุดเฉพาะของคณิตศาสตร์ ที่คุณจะเกี่ยวกับการที่จะดำเนินการ 396 00:21:32,630 --> 00:21:36,210 >> ดังนั้นขณะนี้ที่เราจะเปลี่ยน ค่าของฉันเป็นโปรแกรมที่ได้รับการดำเนินการ, 397 00:21:36,210 --> 00:21:39,540 มันจะทำให้เกิดการห่วงที่จะเลิก ก่อนเวลาอันควรเพราะทั้งหมดในทันทีที่ฉัน 398 00:21:39,540 --> 00:21:42,770 จะเกิดขึ้นมากกว่าค่า ของ NUM หมายความว่าที่สำหรับวง 399 00:21:42,770 --> 00:21:45,410 ไม่มีความจำเป็นที่จะดำเนินการ 400 00:21:45,410 --> 00:21:48,780 ต่อไปจะเกิดขึ้นจะเป็น กรณีที่เราเปลี่ยนค่าของฉัน 401 00:21:48,780 --> 00:21:53,270 เมื่อสาย 17 เป็นไฮไลต์, ซึ่งเป็นจุดในเวลา 402 00:21:53,270 --> 00:21:56,280 ว่าสำหรับการดำเนินการห่วง เป็นจริงถูกประเมิน 403 00:21:56,280 --> 00:22:00,210 >> ถ้าผมมีการเปลี่ยนแปลงค่าของ ฉันอยู่บนเส้นที่แตกต่างกันกล่าวว่า 19 404 00:22:00,210 --> 00:22:03,360 เราจะได้เห็นที่แตกต่างกัน เพราะพฤติกรรมของ 19 สายจะ 405 00:22:03,360 --> 00:22:08,310 ได้ดำเนินการก่อนที่จะห่วง สภาพได้รับการทบทวน 406 00:22:08,310 --> 00:22:11,900 ตอนนี้มาถึงจุดนี้ผมอีกครั้ง ในตอนท้ายของโปรแกรมนี้ 407 00:22:11,900 --> 00:22:15,707 และผมสามารถอนุญาตนี้เพื่อดำเนินการต่อไป อนุญาตให้โปรแกรมของฉันที่จะลาออกตามธรรมชาติ 408 00:22:15,707 --> 00:22:18,290 แต่มีสองสิ่งที่ ที่มีความสำคัญที่จะไป 409 00:22:18,290 --> 00:22:19,960 จากการสนทนานี้โดยเฉพาะ 410 00:22:19,960 --> 00:22:22,490 คุณจะต้องประเมิน สมมติฐานของคุณเอง 411 00:22:22,490 --> 00:22:24,710 เกี่ยวกับวิธีการรหัสควรเป็นพฤติกรรม 412 00:22:24,710 --> 00:22:28,220 เมื่อใดก็ตามที่คุณคิดว่าชิ้นส่วนบางส่วน รหัสที่คุณรู้ว่าจะเกิดขึ้นในการทำงาน 413 00:22:28,220 --> 00:22:30,940 ที่อาจจะมีธงสีแดงที่จะไป กลับมาและประเมินผลและให้แน่ใจว่า 414 00:22:30,940 --> 00:22:33,470 ว่าสมมติฐานของคุณ วิธีโค้ดที่มีการดำเนินงาน 415 00:22:33,470 --> 00:22:38,290 เป็นจริงจริงจะว่ามันเป็นอย่างไร แสดงในรหัสต้นฉบับของคุณ 416 00:22:38,290 --> 00:22:41,300 >> แต่มากยิ่งขึ้นไปยังจุดที่เป็น เมื่อเรากำลังใช้ดีบัก 417 00:22:41,300 --> 00:22:43,920 คุณสามารถใส่จุดพักที่ เส้นที่แตกต่างกันของรหัส 418 00:22:43,920 --> 00:22:48,110 ซึ่งจะทำให้การดีบักไป หยุดการดำเนินการในแต่ละเส้นที่ 419 00:22:48,110 --> 00:22:52,210 เพื่อให้คุณสามารถประเมิน หน่วยความจำหรือแม้กระทั่งการเปลี่ยนในสถานที่ 420 00:22:52,210 --> 00:22:55,630 และอีกครั้งจำไว้ว่าคุณสามารถ สร้างจุดพักหลายเพื่อให้คุณ 421 00:22:55,630 --> 00:23:00,390 นอกจากนี้ยังสามารถกลับมาดำเนินการข้าม มากกว่าส่วนใหญ่ของรหัส 422 00:23:00,390 --> 00:23:04,790 โดยอัตโนมัติและจะหยุดการทำงานชั่วคราว ที่จุดพักต่อไป 423 00:23:04,790 --> 00:23:07,760 >> มีจริงที่สูงขึ้น คุณสมบัติของการดีบักเช่นเดียว 424 00:23:07,760 --> 00:23:10,170 แต่เราจะต้องดูคุณ บางส่วนวิดีโอที่ตามมา 425 00:23:10,170 --> 00:23:14,090 เพื่อที่จะออกจากกันจริงๆหยอกล้อว่า ที่จะใช้ฟังก์ชั่นโดยเฉพาะอย่างยิ่ง 426 00:23:14,090 --> 00:23:15,990 สำหรับตอนนี้ขอขอบคุณ อย่างมากสำหรับการดู 427 00:23:15,990 --> 00:23:18,080 และการแก้จุดบกพร่องโชคดี