Creating Coredump
สำหรับภาษา low level แบบ c หลายครั้งที่มันตาย เราสามารถระบุให้มันสร้าง coredump ขึ้นมาได้ ซึ่ง coredump มันคือ dying message สุดท้ายที่โปรแกรมทิ้งไว้ให้ก่อนตาย ประกอบด้วย memory/register ทั้งหมดของโปรแกรมครับ หมายความว่าเราจะรู้ได้หมดเลยว่ามันเกิดอะไรขึ้นโดยการอ่าน coredump มันคือไฟล์สำหรับไว้ debug ดีๆนี่เอง
เพื่อให้เวลามันพังแล้วมี coredump เราจะเพิ่ม option ulimit ตามข้างล่างไว้ครับ
ถ้าโหลดโค้ดผมมา compile จากบทที่แล้วเรียบร้อยก็ลองสั่งทำงานได้เลยครับส่วนคนที่ยังไม่ได้โหลด ดูโค้ดตามลิ้งค์ข้างล่างได้ครับ (ไม่ค่อย make sense เพราะผมจำเป็นต้องเขียนให้มันมีบัค) และผมจะใช้โค้ดตัวอย่างนี้จนจบบทสุดท้ายเลย https://github.com/Bankde/GDBTutorial/blob/master/example.c
โปรแกรมตัวอย่างของผมคือ รับ input ของ user เข้าไป ทำการ split ออกจากกันด้วย space แล้วทำให้ตัวอักษรตัวแรกเป็นตัวพิมพ์ใหญ่ครับ โค้ดมันคงดูไม่ make sense และดูแย่ ๆ แต่ก็ต้องเขียนออกมาให้มันแย่เพื่อจะ demo ให้ดูแหละครับ
ข้างบนก็จะเป็นข้อความเวลาที่โปรแกรมพัง ข้อความอื่นๆ เช่น
และอื่น ๆ อีกมากมาย error แนวนี้ส่วนใหญ่เกิดจากการที่โปรแกรมทำงานผิดพลาดทั้งนั้น แต่การผิดพลาดพวกนี้ สามารถไล่ไปหาต้นตอได้ง่ายด้วย GDB ครับ
ถ้า follow ตามผมมา หลังจากที่เรารันโปรแกรมจนมันตายไปรอบหนึ่งแล้ว มักจะมี coredump อยู่ครับ
Last updated
Was this helpful?