Ketika kesalahan segmentasi terjadi di Linux, pesan kesalahan Segmentation fault (core dumped)
akan dicetak ke terminal (jika ada), dan program akan dihentikan. Sebagai dev C / C ++, ini sering terjadi pada saya, dan saya biasanya mengabaikannya dan melanjutkan gdb
, membuat kembali tindakan saya sebelumnya untuk memicu referensi memori yang tidak valid lagi. Alih-alih, saya pikir saya mungkin bisa menggunakan "inti" ini sebagai gantinya, karena berlari gdb
sepanjang waktu agak membosankan, dan saya tidak bisa selalu menciptakan kesalahan segmentasi.
Pertanyaan saya tiga:
- Di mana "inti" yang sulit dipahami ini dibuang?
- Apa isinya?
- Apa yang bisa saya lakukan dengannya?
gdb path-to-your-binary path-to-corefile
, laluinfo stack
diikuti olehCtrl-d
. Satu-satunya hal yang mengkhawatirkan adalah bahwa core-dumping adalah hal yang biasa bagi Anda.Jawaban:
Jika orang lain membersihkan ...
... Anda biasanya tidak menemukan apa pun. Tapi untungnya Linux memiliki handler untuk ini yang dapat Anda tentukan saat runtime. Di /usr/src/linux/Documentation/sysctl/kernel.txt Anda akan menemukan:
( terima kasih )
Menurut sumber ini ditangani oleh
abrt
program (itu Alat Pelaporan Bug Otomatis, bukan batal), tetapi pada Arch Linux saya ditangani oleh systemd. Anda mungkin ingin menulis handler Anda sendiri atau menggunakan direktori saat ini.Tapi apa yang ada di sana?
Sekarang apa yang dikandungnya adalah spesifik sistem, tetapi menurut semua ensiklopedia :
... jadi pada dasarnya berisi semua yang
gdb
pernah diinginkan, dan banyak lagi.Ya, tapi saya ingin saya bahagia bukan gdb
Anda berdua bisa bahagia karena
gdb
akan memuat setiap inti sampah selama Anda memiliki salinan tepat dari eksekusi Anda:gdb path/to/binary my/core.dump
. Anda kemudian dapat melanjutkan bisnis seperti biasa dan terganggu dengan mencoba dan gagal memperbaiki bug alih-alih mencoba dan gagal mereproduksi bug.sumber
Juga, jika
ulimit -c
kembali0
, maka tidak ada file dump inti yang akan ditulis.Lihat Di mana mencari file inti yang dihasilkan oleh crash aplikasi linux?
Anda juga dapat memicu dump inti secara manual dengan CTRL- \yang keluar dari proses dan menyebabkan dump inti.
sumber
File inti biasanya dipanggil
core
dan terletak di direktori proses saat ini. Namun, ada daftar panjang alasan mengapa file inti tidak dapat dibuat, dan mungkin terletak di tempat lain, dengan nama yang berbeda. Lihat halaman manual core.5 untuk detail:sumber
Di Ubuntu, semua kerusakan yang terjadi akan masuk ke / var / crash. Laporan kerusakan yang dihasilkan dapat diurai menggunakan apport alat
dan kemudian dump inti dalam laporan yang dibongkar dapat dibaca menggunakan
sumber