Trên Ubuntu gần đây (12.04 trong trường hợp của tôi), có thể in "Lỗi phân đoạn (bị đổ lõi)", nhưng không có tệp lõi nào được tạo ra ở nơi bạn có thể mong đợi (ví dụ: chương trình được biên dịch cục bộ).
Điều này có thể xảy ra nếu bạn có kích thước tệp lõi là 0 (bạn chưa hoàn thành ulimit -c unlimited
) - đây là mặc định trên Ubuntu. Thông thường, điều đó sẽ triệt tiêu "(lõi bị bỏ)", khiến bạn mắc lỗi, nhưng trên Ubuntu, các tệp lõi được chuyển đến Apport (hệ thống báo cáo sự cố của Ubuntu) /proc/sys/kernel/core_pattern
và điều này dường như gây ra thông báo sai lệch.
Nếu Apport phát hiện ra rằng chương trình đang được đề cập không phải là chương trình nên báo cáo sự cố cho (mà bạn có thể thấy xảy ra /var/log/apport.log
), nó sẽ quay lại mô phỏng hành vi kernel mặc định của việc đặt tệp lõi vào cwd (điều này được thực hiện trong tập lệnh /usr/share/apport/apport
). Điều này bao gồm tôn vinh ulimit, trong trường hợp đó nó không làm gì cả. Nhưng (tôi giả sử) khi có liên quan đến kernel, corefile đã được tạo (và được chuyển sang apport), do đó thông báo "Lỗi phân đoạn (lõi bị đổ)".
Cuối cùng PEBKAC vì quên đặt ulimit, nhưng tin nhắn gây hiểu lầm khiến tôi nghĩ rằng tôi sẽ phát điên trong một thời gian, tự hỏi những gì đã ăn lõi của tôi.
(Ngoài ra, nói chung, trang hướng dẫn lõi (5) - man 5 core
- là một tài liệu tham khảo tốt về nơi tệp lõi của bạn kết thúc và lý do có thể không được viết.)