Cara mengatasi "Segmentasi fault (core dumped)"

15

Saya menggunakan Ubuntu 14.04.

Setelah menginstal beberapa aplikasi saya menghadapi kesalahan segmentasi (core dumped) error.

Apa artinya ? Bagaimana saya bisa mengatasi masalah ini?

Sebagai contoh :

Setelah menginstal chrome-stable, ketika saya meluncurkannya dari terminal saya mengalami kesalahan ini.

Ravan
sumber
Beberapa program biner macet, tetapi ini sangat spesifik untuk program yang macet, jadi Anda mungkin perlu memberi tahu kami program mana yang menghasilkan ini, Anda juga dapat mencoba memperbaruinya.
Kwaadpepper
1
Karena ini adalah sumber tertutup, Anda sebaiknya melaporkan laporan bug ke paman GooGle!
user.dz
1
Bagus SH :) Saya akan bertanya paman; P
Ravan
1
Coba hapus preferensi & cache sudo rm -rf ~/.config/google-chrome ~/.cache/google-chrome,. Kemudian jalankan itu mode penyamarangoogle-chrome --incognito
user.dz

Jawaban:

12

Apa artinya?

Lihat AU: Apa itu kesalahan segmentasi? dan juga ini yang memiliki beberapa contoh bagaimana mereproduksinya, SO: Apa itu kesalahan segmentasi? . deskripsi paling sederhana yang dapat saya berikan (mungkin bukan yang sempurna):

Program mencoba mengakses area memori di luar bagiannya sendiri. OS memblokirnya.

Beberapa kasus: Nilai bacaan dengan pointer yang diinisialisasi, Keluar dari jangkauan dalam array, Panggilan fungsi (ketika kompatibilitas ke belakang tidak dipertahankan), ...

Namun tidak selalu mudah menemukan penyebabnya dengan program besar atau yang menyampaikan pada lib proyek lain. Dan sebagian besar kasus berakhir dengan laporan bug, baik untuk program target atau satu jika dependensinya (baik proyek hulu atau paket distribusi hilir).

Bagaimana saya bisa mengatasi masalah ini?

Jika Anda tidak melakukan konfigurasi / pengaturan khusus dan Anda semua pembaruan diinstal. Buat laporan bug , lihat Bagaimana cara melaporkan bug?

Jika open source didukung oleh penggunaan Ubuntu ubuntu-bug( apport-bug). Untuk sumber tertutup pihak ketiga, periksa halaman bantuan mereka bagaimana melaporkan bug dan mengumpulkan data terkait.


Catatan: Jika Anda memiliki sedikit latar belakang pemrograman, disarankan agar Anda mencoba yang terbaik untuk menyelesaikannya sendiri. Ada banyak laporan bug di luar sana yang tidak aktif selama bertahun-tahun. Atau setidaknya mengumpulkan cukup data debug untuk menyelesaikan masalah sebelum melaporkannya.

Beberapa Alat yang Berguna untuk Debugging

  1. apport-bug log / core dump / backtrace

    Jika Anda tidak memiliki pesan kesalahan sebelum kesalahan segmentasi. Jalankan dengan --saveopsi dan cari back-trace log:

    apport-bug program-cmd --save bug-report_output.txt
    
  2. gdb kode sumber backtrace / debuging

    Jika tidak berhasil, gunakan gdb:

    $ gdb program-cmd
    (gdb) run
    (gdb) backtrace
    

    Jika Anda mendapatkan pesan kesalahan, periksa web, launchpad, dan di pelacak bug proyek hulu jika ada kasus serupa.

    Untuk beberapa pengguna tingkat lanjut atau yang mengikuti jalur pembelajaran ac / c ++, mereka dapat mengunduh -dbgpaket simbol yang sesuai . Kemudian Anda dapat menggunakan gdbuntuk melacak aliran program melalui sumber dan mendapatkan fungsi / instruksi yang tepat yang meningkatkan kesalahan runtime.

  3. strace pelacakan panggilan sistem

    Alat lain yang dapat membantu adalah strace , saya menyukainya. Ini benar-benar alat yang ampuh.

    Itu muncul dengan sendirinya:

    Dalam kasus paling sederhana, stracejalankan perintah yang ditentukan sampai keluar. Ini memotong dan merekam panggilan sistem yang dipanggil oleh suatu proses dan sinyal yang diterima oleh suatu proses. Nama setiap panggilan sistem, argumennya dan nilai baliknya dicetak pada kesalahan standar atau ke file yang ditentukan dengan opsi -o.

    straceadalah alat diagnostik, pengajaran, dan debugging yang berguna. Administrator sistem, diagnostik, dan penembak masalah akan merasa sangat berharga untuk menyelesaikan masalah dengan program yang sumbernya tidak tersedia karena tidak perlu dikompilasi ulang untuk melacaknya. Pelajar, peretas, dan yang terlalu ingin tahu akan menemukan bahwa banyak yang dapat dipelajari tentang suatu sistem dan panggilan sistemnya dengan melacak bahkan program-program biasa. Dan programmer akan menemukan bahwa karena panggilan sistem dan sinyal adalah peristiwa yang terjadi pada antarmuka pengguna / kernel, pemeriksaan dekat dari batas ini sangat berguna untuk isolasi bug, pemeriksaan kewarasan dan berusaha untuk menangkap kondisi ras.

    Sumber: man strace

  4. ltrace penelusuran panggilan perpustakaan dinamis

    ltraceadalah program yang hanya menjalankan perintah yang ditentukan sampai keluar. Ini memotong dan merekam panggilan perpustakaan dinamis yang dipanggil oleh proses yang dieksekusi dan sinyal yang diterima oleh proses itu. Itu juga dapat memotong dan mencetak panggilan sistem yang dibuat oleh program.

    Penggunaannya sangat mirip dengan strace(1).

    Sumber: man ltrace

user.dz
sumber