Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

จะค้นหาข้อผิดพลาดในการแบ่งกลุ่มใน C &C ++ ได้อย่างไร (ใช้ GDB)


ข้อผิดพลาดในการแบ่งส่วนเป็นหนึ่งในข้อผิดพลาดรันไทม์ที่เกิดขึ้นเนื่องจากการละเมิดการเข้าถึงหน่วยความจำ เช่น การเข้าถึงดัชนีอาร์เรย์ที่ไม่ถูกต้อง การระบุที่อยู่ที่ถูกจำกัด ฯลฯ ในบทความนี้ เราจะมาดูวิธีการตรวจหาข้อผิดพลาดประเภทนี้โดยใช้เครื่องมือ GDB .

ให้เราดูรหัสและขั้นตอนที่เกี่ยวข้องเพื่อค้นหาข้อผิดพลาด

ตัวอย่าง

#include main() { int* ptr =NULL; *ptr =1; //พยายามเข้าถึงตำแหน่งหน่วยความจำที่ไม่รู้จัก printf("%p\n", ptr);}

รวบรวมรหัสโดยใช้ 'gcc –g program_name.c' และเรียกใช้โดยใช้ './a.out'

ผลลัพธ์

soumyadeep@soumyadeep-VirtualBox:~/Cpp_progs$ ./a.outSegmentation fault (แกนดัมพ์)

เกิดข้อผิดพลาดในการแบ่งส่วน

เขียน 'gdb ./a.out core'

soumyadeep@soumyadeep-VirtualBox:~/Cpp_progs$ gdb ./a.out coreGNU gdb (Ubuntu 8.1-0ubuntu3) 8.1.0.20180409-gitCopyright (C) 2018 Free Software Foundation, Inc.License GPLv3+:GNU GPL เวอร์ชัน 3 หรือ ภายหลัง เป็นซอฟต์แวร์ฟรี:คุณมีอิสระที่จะเปลี่ยนแปลงและแจกจ่ายต่อ ไม่มีการรับประกัน ตามขอบเขตที่กฎหมายอนุญาต พิมพ์ "แสดงการคัดลอก" และ "แสดงการรับประกัน" เพื่อดูรายละเอียด GDB นี้ได้รับการกำหนดค่าเป็น "x86_64-linux-gnu" พิมพ์ "แสดงการกำหนดค่า" สำหรับรายละเอียดการกำหนดค่า สำหรับคำแนะนำในการรายงานจุดบกพร่อง โปรดดูที่: ค้นหาคู่มือ GDB และแหล่งข้อมูลเอกสารอื่นๆ ทางออนไลน์ได้ที่: หากต้องการความช่วยเหลือ ให้พิมพ์ "help" พิมพ์ "apropos word" เพื่อค้นหาคำสั่งที่เกี่ยวข้องกับ "word"...กำลังอ่านสัญลักษณ์จาก ./a.out...done./home/soumyadeep/Cpp_progs/core:ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว (gdb) 

พิมพ์ 'r' แล้วกด Enter

เริ่มโปรแกรม:/home/soumyadeep/Cpp_progs/a.outProgram ได้รับสัญญาณ SIGSEGV, Segmentation fault.0x000055555555465e ใน main () ที่ 1230.find_seg_error.c:55 *ptr =1; //พยายามเข้าถึงตำแหน่งหน่วยความจำที่ไม่รู้จัก (gdb)

เราได้รับข้อผิดพลาดเรียบร้อยแล้ว ตอนนี้ออกจาก GDB

(gdb) quitA เซสชันการดีบักเปิดใช้งานอยู่ ด้อยกว่า 1 [กระบวนการ 2794] จะถูกฆ่า เลิกเลยไหม (y หรือ n) y