ใน Ubuntu ล่าสุด (12.04 ในกรณีของฉัน) เป็นไปได้ที่จะพิมพ์ "Segmentation fault (core dumped)" แต่ไม่มีไฟล์หลักที่คุณอาจคาดหวัง (ตัวอย่างเช่นสำหรับโปรแกรมที่คอมไพล์ในเครื่อง)
สิ่งนี้อาจเกิดขึ้นหากคุณมีขนาดไฟล์หลักเป็น ulimit เป็น 0 (คุณยังไม่ได้ทำulimit -c unlimited
) - นี่เป็นค่าเริ่มต้นบน Ubuntu โดยปกติแล้วจะระงับ "(core dumped)" ซึ่งทำให้คุณเข้าใจผิด แต่ใน Ubuntu นั้น corefiles จะถูกส่งไปยังApport (ระบบรายงานความผิดพลาดของ Ubuntu) ผ่านทาง/proc/sys/kernel/core_pattern
และดูเหมือนว่าจะทำให้เกิดข้อความที่ทำให้เข้าใจผิด
หาก Apport พบว่าโปรแกรมที่เป็นปัญหาไม่ใช่โปรแกรมที่ควรรายงานข้อขัดข้องสำหรับ (ซึ่งคุณสามารถเห็นได้เกิดขึ้น/var/log/apport.log
) มันจะกลับไปจำลองพฤติกรรมการทำงานของเคอร์เนลเริ่มต้นของการวางไฟล์คอร์ใน cwd (จะทำในสคริปต์/usr/share/apport/apport
) ซึ่งรวมถึงการให้เกียรติ ulimit ซึ่งในกรณีนี้มันไม่ทำอะไรเลย แต่ (ฉันถือว่า) ตราบใดที่เคอร์เนลเกี่ยวข้อง corefile ถูกสร้างขึ้น (และ piped เพื่อ apport) ดังนั้นข้อความ "Segmentation fault (core dumped)"
ในที่สุด PEBKAC ที่ลืมตั้ง ulimit แต่ข้อความที่ทำให้เข้าใจผิดทำให้ฉันคิดว่าฉันกำลังจะโมโหชั่วขณะหนึ่งสงสัยว่าสิ่งที่กิน corefiles ของฉัน
(โดยทั่วไปแล้วหน้า core (5) manual - man 5 core
- เป็นการอ้างอิงที่ดีว่าไฟล์หลักของคุณสิ้นสุดที่ใดและสาเหตุที่อาจไม่ถูกเขียน)