>> DOUG LLOYD: สิทธิทั้งหมด GDB
มันคืออะไรกันแน่?
ดังนั้น GDB ซึ่งย่อมาจาก สำหรับ GNU ดีบักเกอร์
เป็นเครื่องมือที่น่ากลัวจริงๆว่าเราสามารถ ใช้เพื่อช่วยให้เราแก้ปัญหาโปรแกรมของเรา
หรือหาสิ่งที่เป็น เกิดผิดพลาดในโปรแกรมของเรา
GDB ที่มีประสิทธิภาพอย่างน่าอัศจรรย์ แต่ การส่งออกและการมีปฏิสัมพันธ์กับมัน
อาจจะเป็นความลับนิด ๆ หน่อย ๆ
มันมักจะเป็นเครื่องมือบรรทัดคำสั่งและ มันสามารถโยนข้อความจำนวนมากที่คุณ
และมันสามารถชนิดยากที่จะ แยกสิ่งที่เกิดขึ้น
โชคดีที่เราได้ดำเนินการตามขั้นตอน ที่จะแก้ไขปัญหานี้ให้คุณ
ขณะที่คุณทำงานผ่าน CS50
ถ้าคุณไม่ได้ใช้กราฟิก ดีบักซึ่งเพื่อนร่วมงานของฉันแดน
Armandarse ได้พูดค่อนข้าง เล็กน้อยเกี่ยวกับในวิดีโอที่
ควรจะมากกว่าที่นี่ ตอนนี้คุณอาจต้อง
ที่จะใช้คำสั่งเหล่านี้สาย เครื่องมือในการทำงานร่วมกับ GDB
หากคุณกำลังทำงานใน CS50 IDE คุณไม่จำเป็นต้องทำเช่นนี้
แต่ถ้าคุณไม่ได้ การทำงานใน CS50 IDE,
บางทีอาจจะใช้รุ่น ของ CS50 เครื่องใช้ไฟฟ้า
หรือ Linux อื่นในการดำเนินงาน ระบบที่มีการติดตั้งบน GDB มัน
คุณอาจจำเป็นต้องใช้ เครื่องมือเหล่านี้บรรทัดคำสั่ง
>> และเนื่องจากคุณอาจจะ ต้องทำก็
ที่มีประโยชน์เพียงเพื่อให้เข้าใจวิธีการ GDB ทำงานจากบรรทัดคำสั่ง
แต่อีกครั้งถ้าคุณ โดยใช้ IDE CS50 คุณ
สามารถใช้กราฟิกดีบัก ที่สร้างไว้ในการ IDE
ดังนั้นเพื่อให้ได้สิ่งที่เกิดขึ้นกับ GDB เพื่อเริ่มต้นการแก้จุดบกพร่อง
กระบวนการของโดยเฉพาะอย่างยิ่ง โปรแกรมทั้งหมดที่คุณต้องทำ
มีการพิมพ์ GDB ตาม โดยใช้ชื่อโปรแกรม
ดังนั้นสำหรับตัวอย่างเช่นถ้าโปรแกรมของคุณ สวัสดีคุณจะพิมพ์ GDB สวัสดี
>> เมื่อคุณทำเช่นนั้นคุณจะ เพื่อดึงสภาพแวดล้อม GDB
ให้คุณจะเปลี่ยนแปลงและ แทนที่จะเป็นสิ่งที่มันมักจะ
คือเมื่อคุณพิมพ์สิ่งที่ ที่ line-- คำสั่งคำสั่ง ls,
cd-- ทั้งหมดของคุณโดยทั่วไป คำสั่ง Linux, รวดเร็วของคุณ
จะเปลี่ยนไปอาจจะเป็นบางสิ่งบางอย่าง เช่นวงเล็บวงเล็บ GDB
นั่นคือพร้อมรับคำ GDB ใหม่ของคุณเพราะ คุณอยู่ในสภาพแวดล้อมที่ GDB
เมื่อภายในของสภาพแวดล้อมที่ มีสองคำสั่งที่สำคัญ
ที่คุณอาจจะใช้ ในลำดับต่อไป
>> ที่แรกก็คือขซึ่ง เป็นระยะสั้นสำหรับการพักผ่อน
และหลังจากที่คุณพิมพ์ B, คุณมักจะ พิมพ์ชื่อของฟังก์ชั่น
หรือถ้าคุณเกิดขึ้นที่จะรู้ว่า รอบสิ่งที่หมายเลขบรรทัด
โปรแกรมของคุณจะเริ่มต้น ที่จะประพฤติแปลกเล็กน้อย
คุณสามารถพิมพ์เส้น จำนวนมีเช่นกัน
สิ่ง B, หรือทำลายไม่ มันช่วยให้โปรแกรมของคุณ
เพื่อให้ทำงานได้จนถึงจุดหนึ่ง คือชื่อของฟังก์ชั่น
ที่คุณระบุหรือเส้น ตัวเลขที่คุณระบุ
>> และที่จุดนั้น จะหยุดการดำเนินการ
นี้เป็นสิ่งที่ดีจริงๆเพราะ การดำเนินการที่ครั้งหนึ่งเคยได้รับการแช่แข็ง
คุณสามารถเริ่มต้นได้ช้ามาก ก้าวผ่านโปรแกรมของคุณ
โดยปกติหากคุณได้รับการทำงาน โปรแกรมของคุณก็จะสั้นสวย
โดยปกติแล้วคุณพิมพ์เฉือนจุดสิ่งที่ ชื่อของโปรแกรมของคุณคือกด Enter,
และก่อนที่คุณจะสามารถกระพริบตาของคุณ โปรแกรมจะดำเนินการเสร็จสิ้นแล้ว
มันไม่จริงมากเวลาที่จะลอง และคิดออกสิ่งที่เกิดผิด
จึงเป็นเรื่องที่จะสามารถที่จะชะลอตัวสิ่ง ลงโดยการตั้งจุดพักด้วย b
แล้วก้าวใน
>> จากนั้นเมื่อคุณได้ตั้งพักของคุณ จุดที่คุณสามารถเรียกใช้โปรแกรม
และถ้าคุณมีใด ๆ อาร์กิวเมนต์บรรทัดคำสั่ง
คุณระบุพวกเขาที่นี่ไม่ได้เมื่อ คุณพิมพ์ GDB ชื่อโปรแกรมของคุณ
คุณสามารถระบุทุกบรรทัดคำสั่ง ข้อโต้แย้งโดยการใช้ R, หรือวิ่ง
และแล้วสิ่งที่อาร์กิวเมนต์บรรทัดคำสั่ง ที่คุณต้องการภายในของโปรแกรมของคุณ
มีจำนวนของอื่น ๆ ที่เป็นจริง คำสั่งที่สำคัญและมีประโยชน์
ภายในสภาพแวดล้อมของจีดีพี
เพื่อให้ฉันเพียงได้อย่างรวดเร็ว ไปกว่าบางคน
>> ที่แรกก็คือ n ซึ่งคือสั้นต่อไป และคุณสามารถพิมพ์ต่อไปแทน n,
ทั้งสองจะทำงาน
และมันก็เป็นเพียงแค่ชวเลข
และในขณะที่คุณอาจอากาศอยู่แล้ว นำมาใช้เพื่อความสามารถในการพิมพ์สิ่ง
สั้นโดยทั่วไปดีขึ้น
และสิ่งที่จะทำคือจะ ก้าวไปข้างหน้าหนึ่งบล็อกของรหัส
ดังนั้นจึงจะก้าวไปข้างหน้า จนกว่าการเรียกฟังก์ชัน
และจากนั้นแทน การดำน้ำในฟังก์ชั่นที่
และจะผ่านทุกฟังก์ชั่นที่ รหัสมันก็จะมีฟังก์ชั่น
>> ฟังก์ชั่นจะถูกเรียกว่า
มันจะทำสิ่งที่การทำงานของมันคือ
มันจะคืนค่าไป ฟังก์ชั่นที่เรียกว่า
แล้วคุณจะย้ายไป บรรทัดถัดไปที่ฟังก์ชั่นการโทร
ถ้าคุณต้องการที่จะก้าว ภายในของฟังก์ชั่น
แทนการเพียงแค่มี มันดำเนินการโดยเฉพาะอย่างยิ่ง
ถ้าคุณคิดว่าปัญหาที่เกิดขึ้น อาจจะอยู่ด้านในของฟังก์ชั่นที่
คุณสามารถของหลักสูตรที่กำหนดพัก จุดภายในของฟังก์ชั่นที่
หรือถ้าคุณกำลังทำงานอยู่แล้วคุณสามารถ ใช้ที่จะก้าวไปข้างหน้าหนึ่งบรรทัดของรหัส
>> ดังนั้นนี้จะมีขั้นตอนใน และดำน้ำในฟังก์ชั่น
แทนเพียงมีการดำเนินการ และต่อเนื่องในการทำงาน
ว่าคุณอยู่ในการแก้จุดบกพร่อง
หากคุณเคยต้องการที่จะรู้ว่า ค่าของตัวแปรที่
คุณสามารถพิมพ์พีหรือพิมพ์ แล้วชื่อตัวแปร
และที่จะพิมพ์ออกมาให้คุณ ภายในสภาพแวดล้อม GDB,
ชื่อของตัวแปรที่ you-- แก้ตัว me-- ค่าของตัวแปรที่
ที่คุณได้รับการตั้งชื่อ
หากคุณต้องการที่จะรู้คุณค่าของทุกคน ท้องถิ่นตัวแปรที่สามารถเข้าถึงได้จาก
คุณกำลังอยู่ในของคุณ โปรแกรมคุณสามารถพิมพ์ข้อมูลชาวบ้าน
มันมากเร็วกว่า พิมพ์หน้าแล้วอะไรก็ตาม
รายชื่อออกทั้งหมดของ ตัวแปรที่คุณรู้ว่ามีอยู่
คุณสามารถพิมพ์ข้อมูลชาวบ้านและ จะพิมพ์ออกมาทุกอย่างให้คุณ
ถัดลงมาเป็นบาทซึ่งเป็น สั้นกลับ Trace
ตอนนี้โดยทั่วไป โดยเฉพาะอย่างยิ่งในช่วงต้น CS50,
คุณจะไม่ได้จริงๆมีโอกาส ใช้บาทหรือกลับติดตาม
เพราะคุณไม่ได้มีฟังก์ชั่น ที่เรียกร้องการทำงานอื่น ๆ
>> คุณอาจมีสายหลัก ฟังก์ชั่น แต่ที่มันอาจจะ
คุณไม่ได้มีฟังก์ชั่นอื่น ๆ ที่ เรียกใช้ฟังก์ชันอื่นซึ่ง
เรียกฟังก์ชั่นอื่นและอื่น ๆ
แต่ในขณะที่โปรแกรมของคุณจะได้รับเพิ่มเติม ที่ซับซ้อนและโดยเฉพาะอย่างยิ่ง
เมื่อคุณเริ่มต้นการทำงาน มีการเรียกซ้ำกลับร่องรอย
อาจจะเป็นวิธีที่มีประโยชน์มากที่จะช่วยให้คุณ ชนิดของการได้รับบริบทที่บางส่วน
ผมอยู่ในโปรแกรมของฉัน
เพื่อบอกว่าคุณเขียนรหัสของคุณและ คุณรู้ไหมว่าหลักเรียกฟังก์ชั่น
ฉซึ่งเรียกฟังก์ชั่น กรัมซึ่งเรียกชั่วโมงฟังก์ชั่น
ดังนั้นเราจึงมีหลายชั้น ของการทำรังเกิดขึ้นที่นี่
>> หากคุณอยู่ภายใน สภาพแวดล้อม GDB ของคุณ
และคุณรู้ว่าภายในของคุณ ของชั่วโมง แต่คุณลืม
เกี่ยวกับสิ่งที่มีคุณไปที่คุณ are-- คุณสามารถพิมพ์บาทหรือร่องรอยกลับ
และมันจะพิมพ์ออกมาชมกรัมฉหลัก พร้อมกับบางส่วนข้อมูลอื่น ๆ ซึ่ง
ช่วยให้คุณมีเบาะแสว่าหลักตกลง เรียกฉฉเรียกกรัมกรัมเรียกว่าเอช
และนั่นคือสิ่งที่ฉัน ขณะนี้ผมอยู่ในโปรแกรมของฉัน
ดังนั้นจึงจะมีประโยชน์จริงๆ โดยเฉพาะอย่างยิ่งเป็นความลับ-Ness ของ GDB
จะกลายเป็นเล็ก ๆ น้อย ๆ อย่างท่วมท้นในการ พบว่าสิ่งที่เป็น
สุดท้ายเมื่อโปรแกรมของคุณจะทำ หรือเมื่อคุณทำเสร็จแล้วมันแก้จุดบกพร่อง
และคุณต้องการที่จะก้าวออกไป จากสภาพแวดล้อม GDB,
จะช่วยให้ทราบวิธีการที่จะได้รับจากมัน
คุณสามารถพิมพ์คิวหรือเลิกที่จะได้รับการออก
ตอนนี้ก่อนที่วิดีโอวันนี้ ฉันเตรียมโปรแกรมรถม้าชนิดเล็ก
เรียกว่า buggy1 ซึ่งผมรวบรวม จากไฟล์ที่เรียกว่า buggy1.c
ในขณะที่คุณอาจคาดหวังนี้ โปรแกรมในความเป็นจริงรถ
อะไรผิดพลาด เมื่อฉันพยายามและเรียกใช้
ตอนนี้น่าเสียดายที่ผมไม่ได้ตั้งใจ ลบไฟล์ buggy1.c ของฉัน
ดังนั้นเพื่อที่ผมจะคิดออก สิ่งที่เกิดขึ้นอย่างผิดปกติกับโปรแกรมนี้
ฉันจะต้องใช้ GDB ชนิดของสุ่มสี่สุ่มห้าพยายาม
เพื่อนำทางผ่านโปรแกรมนี้ไป คิดออกว่าสิ่งที่เกิดผิดพลาด
แต่ใช้เพียงเครื่องมือ เราได้เรียนรู้แล้วเกี่ยวกับ
เราสามารถรูปสวยมาก ออกว่ามันคืออะไร
ดังนั้นขอให้ตรงไปที่ IDE CS50 และได้ดู
ตกลงดังนั้นเราอยู่ที่นี่ในของฉัน CS50 สภาพแวดล้อม IDE,
และฉันจะซูมเข้านิด ๆ หน่อย ๆ เพื่อให้คุณสามารถมองเห็นน้อยมาก
ในหน้าต่าง terminal ของฉันหากฉันรายการ เนื้อหาของกรรมการปัจจุบันของฉัน
ด้วยคำสั่ง ls เราจะเห็นว่าผม มีคู่ของไฟล์แหล่งที่มา
ที่นี่รวมทั้ง กล่าวก่อนหน้านี้ buggy1
สิ่งที่ว่าไปในเมื่อ ฉันพยายามและเรียก buggy1
ดีขอหา
ฉันพิมพ์เฉือนจุด รถและผมกด Enter
>> ความผิดพลาดของการแบ่งกลุ่ม
ที่ไม่ดี
ถ้าคุณจำเป็น มักจะผิดส่วน
เกิดขึ้นเมื่อเราเข้าถึงหน่วยความจำ ที่เราไม่ได้รับอนุญาตให้สัมผัส
เราได้มาถึงอย่างใด นอกขอบเขต
ของสิ่งที่โปรแกรมนี้ คอมไพเลอร์ได้ให้เรา
และมีอยู่แล้วเพื่อให้เป็น เบาะแสที่จะเก็บไว้ในกล่องเครื่องมือ
ในขณะที่เราเริ่มต้นกระบวนการแก้จุดบกพร่อง
สิ่งที่ได้ไปผิดเล็ก ๆ น้อย ๆ ที่นี่
>> สิทธิทั้งหมดเพื่อให้เป็นจุดเริ่มต้น ขึ้นกับสภาพแวดล้อม GDB
และดูว่าเราสามารถคิดออก ว่าสิ่งที่เป็นปัญหา
ฉันจะล้างหน้าจอของฉัน และฉันจะพิมพ์ GDB
อีกครั้งที่จะเข้าสู่สภาพแวดล้อม GDB, และชื่อของโปรแกรม
ที่ฉันต้องการที่จะแก้ปัญหา, buggy1
เราได้รับข้อความเล็ก ๆ น้อย ๆ ที่ได้อ่าน สัญลักษณ์จาก buggy1 ทำ
ทั้งหมดนั่นหมายความว่ามันดึง รวมกันทั้งหมดของรหัส
และตอนนี้ก็ถูกโหลดลงใน GDB และก็พร้อมที่จะไป
>> ตอนนี้สิ่งที่ฉันต้องการจะทำอย่างไร?
คุณจำได้ว่า ขั้นตอนแรกมักจะเป็น
หลังจากที่ฉันภายในสภาพแวดล้อมเช่นนี้?
หวังว่าคุณกล่าวว่าตั้ง จุดพักเพราะ
ในความเป็นจริงนั่นคือสิ่งที่ฉันต้องการจะทำ
ตอนนี้ผมไม่ได้มี รหัสแหล่งที่มาของเรื่องนี้
ในด้านหน้าของฉันซึ่งอาจเป็น กรณีที่ไม่ได้ใช้งานทั่วไปโดยวิธีการ
คุณอาจจะ
ดังนั้นที่ดี
แต่สมมติว่าคุณทำไม่ได้อะไร หนึ่งฟังก์ชั่นที่คุณรู้ว่า
ที่มีอยู่ในทุกโปรแกรม C เดียว?
ไม่ว่าใหญ่หรือวิธีการที่ซับซ้อน มันเป็นฟังก์ชั่นนี้แน่นอนอยู่แล้ว
หลักใช่มั้ย?
>> ดังนั้นความล้มเหลวในสิ่งอื่นใดที่เราสามารถ ตั้งจุดพักที่หลัก
และอีกครั้งผมก็สามารถพิมพ์ ทำลายหลักแทนข
และถ้าคุณอยากรู้ถ้าคุณ ที่เคยพิมพ์ออกคำสั่งยาว
แล้วรู้ว่าคุณ พิมพ์สิ่งที่ผิด
และคุณต้องการที่จะกำจัด ทั้งหมดเท่าที่ฉันก็ไม่ได้,
คุณสามารถใช้การควบคุม U ซึ่งจะ ลบทุกอย่างและนำคุณกลับ
จุดเริ่มต้นของเส้นเคอร์เซอร์
จำนวนมากได้เร็วขึ้นกว่าเพียงแค่กดปุ่ม ลบหรือกดปุ่มมันพวงครั้ง
เกิน.
>> ดังนั้นเราจะตั้งจุดพักที่หลัก
และในขณะที่คุณสามารถเห็นมันบอกว่าเราได้ ตั้งจุดพักที่ buggy1.c ไฟล์
และเห็นได้ชัดบรรทัดแรก รหัสของหลักคือสายเจ็ด
อีกครั้งที่เราจะได้ไม่ต้อง แฟ้มแหล่งที่มาที่นี่
แต่ฉันจะคิดว่ามันเป็น บอกความจริง
แล้วฉันแค่พยายาม และเรียกใช้โปรแกรมอาร์
โปรแกรมเริ่มต้น
สิทธิทั้งหมดเพื่อให้ข้อความนี้ เป็นเพียงเล็กน้อยที่เป็นความลับ
แต่โดยทั่วไปสิ่งที่ เกิดขึ้นที่นี่เป็นมันเป็นเพียงแค่
บอกฉันฉันตีแบ่งของฉัน จุดจุดพักจำนวน 1
>> แล้วบรรทัดของรหัสที่ ไม่พบไฟล์หรือโฟลเดอร์.
เหตุผลเดียวที่ว่า ฉันเห็นข้อความว่า
เป็นเพราะฉันไม่ได้ตั้งใจ ลบไฟล์ buggy.c ของฉัน
หากไฟล์ buggy1.c ของฉันอยู่ ในไดเรกทอรีปัจจุบัน
สิทธิที่จะมีเส้นจริง บอกฉันว่าบรรทัดของรหัส
ตัวอักษรอ่าน
แต่น่าเสียดายที่ฉันลบมัน
เรากำลังจะมีชนิดของนำทาง ผ่านมากขึ้นเล็ก ๆ น้อย ๆ สุ่มสี่สุ่มห้า
>> ตกลงดังนั้นเรามาดูสิ่งที่ ฉันต้องการที่จะทำที่นี่?
ดีฉันอยากจะรู้ว่าสิ่งที่ท้องถิ่น ตัวแปรที่อาจจะมีอยู่กับผม
ผมได้เริ่มต้นโปรแกรมของฉัน
ลองมาดูสิ่งที่อาจจะ เริ่มต้นแล้วสำหรับเรา
ฉันพิมพ์ข้อมูลชาวบ้านชาวบ้านไม่มี
สิทธิทั้งหมดเพื่อให้ไม่ได้ ให้ฉันตันของข้อมูล
ผมอาจจะลองและพิมพ์ตัวแปร แต่ผมไม่ทราบว่าชื่อตัวแปรใด ๆ
ผมอาจจะลองร่องรอยกลับ แต่ฉันภายในของหลัก
ดังนั้นฉันรู้ว่าฉันไม่ได้ทำ สายงานอื่นในขณะนี้
>> ดังนั้นดูเหมือนว่าตัวเลือกเดียวของฉันเป็น ที่จะใช้หรือเพื่อให้ n และเริ่มที่จะดำน้ำใน
ฉันจะใช้ n
ดังนั้นผมจึงพิมพ์ n
โอ้เอ้ยเป็นสิ่งที่เกิดขึ้นที่นี่
โปรแกรมที่ได้รับสัญญาณ ผิดส่วน SIGSEGV,
และจากนั้นทั้งกลุ่มของสิ่งที่
ฉันจมอยู่แล้ว
ดีมีจริง จำนวนมากที่จะได้รับการเรียนรู้ที่นี่
ดังนั้นสิ่งที่บอกเรา?
สิ่งที่มันบอกเราก็คือโปรแกรมนี้ เรื่องเกี่ยวกับการ แต่ยังไม่ได้ความผิด seg
และโดยเฉพาะอย่างยิ่งผมจะ เพื่อขยายให้ดียิ่งขึ้นที่นี่
มันเป็นเรื่องเกี่ยวกับความผิดเกี่ยวกับ SEG สิ่งที่เรียกว่า strcmp
>> ตอนนี้เราอาจจะไม่ได้กล่าวถึง ฟังก์ชั่นนี้อย่างกว้างขวาง
แต่มัน is-- เพราะเราไม่ได้ไป ที่จะพูดคุยเกี่ยวกับการทำงานทุกที่
ที่มีอยู่ในมาตรฐานซี library-- แต่พวกเขากำลังทั้งหมดที่มีให้คุณ
โดยเฉพาะอย่างยิ่งถ้าคุณใช้ ดู reference.cs50.net
และ strcmp เป็นที่มีประสิทธิภาพจริงๆ ฟังก์ชั่นที่มีอยู่ภายใน
ส่วนหัวของสตริง ไฟล์ซึ่งเป็นส่วนหัว
ไฟล์ที่ทุ่มเทให้กับการทำงาน ที่ทำงานร่วมกับและจัดการสตริง
>> และโดยเฉพาะอย่างยิ่งสิ่งที่ strcmp จะเป็น เปรียบเทียบค่าของทั้งสองสาย
ดังนั้นฉันจะผิดส่วน ในการเรียกร้องให้ strcmp ดูเหมือนว่า
ฉันตี n และในความเป็นจริงที่ฉันได้รับข้อความ โปรแกรมสิ้นสุดลงด้วยสัญญาณ SIGSEGV
ผิดส่วน ดังนั้นตอนนี้ ที่จริงผมมีโทษฐาน seg,
และโปรแกรมของฉันมีสวย ได้อย่างมีประสิทธิภาพมากขึ้นได้รับ
นี่คือจุดสิ้นสุดของโปรแกรม
มันยากจนลงก็ตก
ดังนั้นก็ไม่มาก แต่ฉัน จริงได้เรียนรู้ไม่น้อย
จากประสบการณ์น้อย
ฉันได้เรียนรู้อะไร?
ดีโปรแกรมของฉันเกิดปัญหา ทันทีที่สวยมาก
โปรแกรมของฉันเกิดปัญหาเกี่ยวกับการ โทรไป strcmp แต่ฉัน
ไม่ได้มีตัวแปรท้องถิ่นใด ๆ ในของฉัน โปรแกรมในเวลานั้นมันเกิดปัญหา
ดังนั้นสิ่งที่สตริงหรือสตริง ฉันจะอาจจะเปรียบเทียบ
ถ้าฉันไม่ได้มีในท้องถิ่น ตัวแปรที่คุณอาจ
คาดการณ์ว่าฉัน have-- อาจจะมีเป็น ตัวแปรทั่วโลกซึ่งอาจจะเป็นจริง
>> แต่โดยทั่วไปดูเหมือนว่า เหมือนฉันเปรียบเทียบ
บางสิ่งบางอย่างที่ไม่ได้อยู่
ดังนั้นขอให้ตรวจสอบ ที่เพียงเล็กน้อยต่อไป
ดังนั้นฉันจะล้างหน้าจอของฉัน
ฉันจะออกจากออกจาก สภาพแวดล้อม GDB เป็นครั้งที่สอง
และฉันคิดว่าตกลงเพื่อให้มี ไม่มีตัวแปรท้องถิ่นในโปรแกรมของฉัน
ฉันสงสัยว่าบางทีฉันควรที่จะผ่าน ในสตริงเป็นอาร์กิวเมนต์บรรทัดคำสั่ง
ดังนั้นขอเพียงการทดสอบนี้
ผมไม่เคยทำแบบนี้มาก่อน
>> ลองมาดูว่าบางทีถ้าผมใช้โปรแกรมนี้ กับอาร์กิวเมนต์บรรทัดคำสั่งการทำงาน
อืมมมไม่ผิดส่วนที่มี
มันก็บอกว่าฉันคิดออก
ดังนั้นบางทีที่แก้ไขได้ที่นี่
และแน่นอนถ้าผมกลับไปดูที่ รหัสแหล่งที่มาที่แท้จริงสำหรับ buggy1.c,
มันดูเหมือนกับว่าสิ่งที่ฉันทำคือ ฉันทำให้การเรียกร้องให้ strcmp โดยไม่ต้อง
ตรวจสอบว่าในความเป็นจริง argv [1] มีอยู่
นี้เป็นจริง รหัสที่มาสำหรับ buggy1.c
ดังนั้นสิ่งที่ฉันต้องการจริงๆ ทำที่นี่เพื่อแก้ไขโปรแกรมของฉัน
สมมติว่าผมมี ยื่นในด้านหน้าของฉันคือ
เพียงแค่เพิ่มการตรวจสอบที่จะทำให้ แน่ใจ argc ที่เท่ากับ 2
ดังนั้นตัวอย่างนี้อีกครั้งเหมือนที่ผมกล่าวว่า เป็นนิด ๆ หน่อย ๆ ที่วางแผนไว้ใช่มั้ย?
คุณโดยทั่วไปไม่ได้ไป ตั้งใจลบรหัสต้นฉบับของคุณ
และจากนั้นจะต้องพยายาม และแก้ปัญหาโปรแกรม
แต่หวังว่ามันทำให้ คุณภาพประกอบ
ชนิดของสิ่งที่ คุณอาจจะคิดเกี่ยวกับ
ขณะที่คุณกำลังแก้จุดบกพร่องของโปรแกรม
>> อะไรสถานะของกิจการที่นี่?
ผมทำในสิ่งที่ตัวแปร สามารถเข้าถึงได้กับผมหรือเปล่า
ที่ว่าเป็นโปรแกรมของฉัน ล้มเหลวในสิ่งที่บรรทัด
ในสิ่งที่เรียกร้องให้ฟังก์ชั่นอะไร?
ชนิดของปมที่ไม่ให้ฉัน?
และที่ว่า ชนิดของความคิดที่คุณ
ควรจะได้รับในขณะที่คุณกำลัง ความคิดเกี่ยวกับการแก้จุดบกพร่องโปรแกรมของคุณ
>> ฉันลอยด์ดั๊ก
นี่คือ CS50