Posting ini menjelaskan cara menganalisis pesan segfault dalam file pesan dan mengidentifikasi masalah di sisi aplikasi atau sistem operasi.
Apa itu “segfault”?
Kesalahan segmentasi (sering disingkat menjadi segfault) atau pelanggaran akses adalah kesalahan yang ditimbulkan oleh perangkat keras dengan perlindungan memori, untuk memberi tahu sistem operasi (OS) tentang pelanggaran akses memori. Kernel Linux akan meresponsnya dengan melakukan beberapa tindakan korektif, umumnya meneruskan kesalahan ke proses yang menyinggung dengan mengirimkan proses sinyal seperti #11. Proses dalam beberapa kasus dapat menginstal penangan sinyal khusus, memungkinkan mereka untuk pulih sendiri, tetapi sebaliknya penangan sinyal default Linux digunakan. Segfault umumnya akan menyebabkan proses dihentikan, dan menghasilkan dump inti dengan pengaturan ulimit yang tepat.
Bagaimana cara memeriksanya?
1. Tandai segfault
Segfault biasanya hanya menandakan kesalahan dalam satu proses atau program tertentu. Itu tidak menandakan kesalahan Kernel Linux. Kernel hanya mendeteksi kesalahan proses atau program dan (pada beberapa arsitektur) mencetak informasi ke log seperti di bawah ini:
02
2. Apa yang dimaksud dengan detail pesan ini?
Nilai RIP adalah nilai register penunjuk instruksi, RSP adalah nilai register penunjuk tumpukan. Nilai kesalahan adalah topeng bit dari bit kode kesalahan kesalahan halaman (dari arch/x86/mm/fault.c):
12
Berikut definisi bit kesalahan:
29
Kode kesalahan 15 adalah 1111 bit. Akhirnya, kita dapat mengetahui arti 1111 sebagai berikut:
33
Pesan ini menunjukkan bahwa aplikasi memicu kesalahan perlindungan karena proses tersebut mencoba menulis akses ke bagian memori yang dicadangkan dalam mode pengguna.