Jika saya menjalankan program dari shell, dan itu segfaults:
$ buggy_program
Segmentation fault
Ini akan memberi tahu saya, bagaimanapun, apakah ada cara untuk mendapatkan program untuk mencetak backtrace, mungkin dengan menjalankan sesuatu seperti ini:
$ print_backtrace_if_segfault buggy_program
Segfault in main.c:35
(rest of the backtrace)
Saya juga lebih suka tidak menggunakan strace atau ltrace untuk informasi semacam itu, karena mereka akan mencetak baik ...
Maaf datang ke sini 2 tahun kemudian ... menemukan sambil mencari sesuatu yang lain. Menambahkan ini untuk kelengkapan.
1) Sementara saya pikir jawaban yang diterima bagus, itu membutuhkan gdb. Metode yang saya kenal menggunakan libSegFault.so.
Jika Anda menjalankan aplikasi dengan
Anda akan mendapatkan laporan dengan lacak balik, lib yang dimuat, dll
2) Sebuah skrip wrapper
catchsegv
juga tersedia yang akan berusaha digunakanaddr2line
untuk menerjemahkan alamat ke nama file + nomor baris.Ini adalah solusi yang jauh lebih ringan daripada file inti atau gdb (bagus untuk sistem embedded misalnya)
sumber
LD_PRELOAD=libSegFault.so
tidak masalah jika ada di jalur dl.Anda membutuhkan GDB teman semua orang
Setelah Anda memuat corefile Anda, perintah 'backtrace' (dapat disingkat menjadi bt) akan memberi Anda tumpukan panggilan saat ini. Jika Anda menjalankan program dari dalam gdb, Anda dapat mengatur breakpoint sembarang dan memeriksa konten memori, dll.
sumber
catchsegv
Itu disebutkan dalam jawaban lain (tetapi sama sekali tidak fokus pada). Ini adalah alat praktis yang dibundel dengan proyek glibc. Ini akan memberikan backtrace (dan informasi debug berguna lainnya) hanya jika suatu program memang melakukan segfault.
Tulisan yang bagus ada di sini .
Anda dapat memasukkannya ke dalam skrip Anda sendiri sesuai keinginan Anda.
sumber
Ubuntu (sebagai proyek) menggunakan Apport untuk melakukan ini. Anda dapat melihat bagaimana mereka melakukannya.
https://wiki.ubuntu.com/Apport
sumber
/proc/sys/kernel/core_pattern
Ini adalah varian naskah yang sedikit dimodifikasi dari Kyle Brandt. Ini ditingkatkan dengan cara-cara berikut:
Naskah:
sumber
-ex
sebagai gantinya.gdb ... -ex 'set pagination off' -ex backtrace -ex quit