Tidak ada dump inti setelah peningkatan terbaru ke systemd?

12

Ketika saya menjalankan program yang saya kerjakan, itu gagal dengan pesan berikut:

...
Aborted (core dumped)

Namun, tidak ada dump inti yang dibuat. Core dump sudah ditulis sebelumnya, dan saya tidak ingat bahwa saya mengubah apa pun yang terkait dengannya.

Ketika saya berlari ulimit -asaya kembali,

$ ulimit -a
core file size          (blocks, -c) unlimited
...

Poin lainnya,

  • Saya memverifikasi bahwa pengguna saya dapat membuat file di direktori saat ini.
  • Saya membaca tentang /proc/sys/fs/suid_dumpable. Saat ini, sudah diatur ke 0 pada mesin saya. Saya mencoba mengubahnya menjadi 1 atau 2 tetapi tidak ada perbedaan.
  • Saya juga mencoba menjalankan program sebagai root, tetapi itu juga tidak membuat perbedaan.

Sayangnya, saya tidak ingat kapan saya bisa menghasilkan dump-core yang sukses terakhir.

Philipp Claßen
sumber

Jawaban:

8

Dari dokumen coredump.conf,

Untuk menonaktifkan file konfigurasi yang disediakan oleh vendor, cara yang disarankan adalah menempatkan symlink ke /dev/nulldalam direktori konfigurasi /etc/, dengan nama file yang sama dengan file konfigurasi vendor.

sudo ln -s /dev/null /etc/sysctl.d/coredump.conf
sudo systemd-sysctl 

Sejak systemd, semuanya dikelola secara berbeda.

schaiba
sumber
Wow kamu benar! Belum lama ini saya beralih ke systemd. sudo systemd-coredumpctlmenunjukkan semua dump inti yang hilang. Solusi Anda berfungsi tetapi hanya setelah sistem dinyalakan ulang.
Philipp Claßen
1
systemdBaru systemd-sysctl.servicesaja berjalansysctl pada titik yang tepat dari boot, dan menangani rerunning dengan tangan pada perubahan. Dan jangan membuat / menimpa file konfigurasi tanpa menyelidiki untuk apa mereka dan isinya.
vonbrand
1
File tersebut sepertinya diubah namanya menjadi 50-coredump.conf, untuk menerapkan pengaturan pada boot saat ini, saya harus menjalankan perubahan pengaturan sysctl secara manual, lihat stackoverflow.com/q/2065912/427545 .
Lekensteyn
2
Untuk mengembalikan default, jangan setel string kosong, gunakan ini sebagai gantinya: sysctl -w kernel.core_pattern="core"
Lekensteyn
2

Anda mungkin ingin menggunakan coredumpctlperintah untuk mengambil dump inti Anda atau menjalankan gdb di atasnya. Itulah metode 'systemd disetujui' untuk berurusan dengan mereka. : - /

Dalam arti tertentu, agak menyenangkan bahwa systemd menangkap semua hal ini karena akan menghapusnya secara otomatis setelah beberapa saat, dan itu juga membuatnya mudah untuk mengunggah crash dumps untuk laporan bug.

Tapi, itu adalah perubahan yang menggelegar dengan sedikit cara pemberitahuan atau petunjuk bagi orang-orang yang tahu bagaimana coredumps bekerja sebelum systemd terlibat. Bahkan menjatuhkan file bernama 'core.pid.txt' dengan instruksi untuk menggunakan coredumpctl untuk mendapatkan coredump Anda serta cara mematikan pembuatan .txtfile akan sangat membantu, meskipun mereka juga akan membuang sampah sembarangan. filesystem untuk sementara.

Beraneka ragam
sumber