Di Ubuntu saya telah menghadapi kesalahan kesalahan segmentasi berkali-kali. Apa itu kesalahan segmentasi dan kapan itu terjadi?
memory
segmentation-fault
Tachyons
sumber
sumber
Jawaban:
Kesalahan yang mengatakan kesalahan segmentasi (atau segfault , atau SIGSEGV ) di Ubuntu dan sistem operasi mirip Unix lainnya, atau mengatakan kesalahan perlindungan umum di Windows, adalah ketika suatu program mencoba mengakses bagian memori yang tidak dapat diakses, atau yang programnya dilarang mengakses. Kesalahan segmentasi adalah jenis crash program, yaitu, penghentian program yang tidak normal. Lihat artikel Wikipedia pada crash , perlindungan memori , kesalahan segmentasi , kesalahan perlindungan umum , dan SIGSEGV untuk informasi lebih lanjut (dan pemahaman yang lebih bertekstur topik daripada yang disajikan di sini).
Kesalahan segmentasi hampir selalu disebabkan oleh bug dalam program di mana ia terjadi. Saya menduga sebagian besar atau semua kesalahan segmentasi Anda terjadi dari aplikasi yang sama. Berikan detail lebih lanjut tentang keadaan di mana kesalahan segmentasi terjadi pada mesin Anda, dan program apa yang macet. Harap berikan juga teks lengkap dan tepat dari pesan kesalahan yang Anda terima dan pesan lain apa pun yang muncul sebelumnya. Ini harus memungkinkan kami untuk memberikan saran terperinci yang khusus untuk masalah Anda (bukan hanya informasi umum tentang kesalahan segmentasi).
Cara terbaik bagi Anda untuk memberikan informasi ini adalah dengan mengedit pertanyaan Anda untuk memasukkannya . Atau, jika Anda ingin pertanyaan ini hanya tentang kesalahan segmentasi secara umum, Anda dapat memposting pertanyaan baru untuk bertanya tentang apa yang secara spesifik menyebabkan kesalahan segmentasi Anda (jika Anda melakukan ini, pastikan untuk memberikan semua detail ini dalam pertanyaan baru Anda) .
sumber
Kesalahan segmentasi disebabkan oleh bug dalam aplikasi. Secara teknis itu berarti aplikasi mencoba membaca atau menulis ke bagian memori yang bukan miliknya (atau tidak ada). Tentu saja dilarang membaca atau menulis ke memori orang lain dan ketika sistem (kernel) mendeteksi ini, itu akan memaksa aplikasi untuk berhenti.
sumber
Lewatlah sudah hari-hari ketika orang biasa melacak kode perakitan dan men-debug masalah. Abends, Dr Watson, Kesalahan segmentasi. Hari-hari hijau itu hilang.
Salah satu alasan untuk kesalahan segmentasi adalah ketika kode yang memiliki akses langsung ke memori gagal. Ketika sepotong kode mencoba mengakses segmen memori dari aplikasi yang berbeda, kesalahan segmentasi terjadi. Alokasi memori beberapa kali dipindahkan untuk memungkinkan blok memori yang berdekatan dan lebih besar dialokasikan. Ketika mencoba untuk memulihkan, kernel berusaha keras untuk menyimpan semua informasi memorinya ke file, keadaan saat ini dari semua aplikasi yang berjalan pada cpu dan statusnya (menjalankan instruksi terakhir) ke file dan mati. Ini juga akan mencoba untuk menyimpan sebanyak mungkin informasi pemulihan, dan menutup sebanyak mungkin file, sehingga hdd tidak mendapatkan tautan yang rusak.
Debug dan perbaiki jika Anda bisa memperbanyaknya. Jika Anda tidak dapat mereproduksinya, cukup bergandengan tangan, berlutut dan berdoa keras-keras agar Anda tidak melihatnya "secara teratur".
sumber
SIGSEGV
handler ke hal lain selainSIG_DFL
(yang membuang inti dan keluar untuk aSIGSEGV
) karena jika Anda mengakses memori yang seharusnya tidak ada maka ada sesuatu yang sudah sangat salah dan pemulihan mungkin tidak mungkin. (2) Inti akan dibuang hanya setelah proses dihentikan. (3) dump inti hanya mencakup memori dan register dari proses yang dibuang. (4) Proses lain, CPU dan kernal tidak terpengaruh oleh segfault dari proses lain.