Bagaimana kita bisa melacak masalah program macet di Linux?

12

Jika aplikasi mogok di Windows, kami dapat memeriksa Peraga Peristiwa di alat Administrasi untuk melihat apa yang macet. Terkadang ia memiliki informasi bermanfaat yang tidak dimiliki orang lain, tetapi ini merupakan awal.
Di linux jika suatu aplikasi (ada) crash bagaimana seseorang mulai melacak apa yang terjadi?
Apakah ada misalnya beberapa log pusat atau yang serupa?

Jim
sumber
2
Cara standar untuk debugging hal semacam ini adalah meluncurkan aplikasi yang bermasalah dari terminal secara manual. Dengan begitu Anda dapat melihat pesan kesalahan dicetak.
terdon
2
Versi 64-bit Linux akan mencatat deskripsi singkat dari proses macet (yang mati karena sinyal) di /var/log/syslog. Linux menyediakan cara agar daemon diberi tahu proses crash. Ubuntu Apport dan Red Hat ABRT digunakan ini untuk memberikan logging dan laporan-generasi fasilitas terpusat. Umumnya dump inti disimpan sehingga Anda dapat memanggil debugger pada program yang macet.
Mark Plotnick
Saya akan mengangkat pertanyaan ini, tetapi OP tampaknya tidak ingin membantu masyarakat dengan menerima, atau memposting, jawaban, jadi saya akan menemukan pertanyaan serupa yang tidak menerima jawaban dan mendukung itu, dengan harapan akan naik ke puncak hasil pencarian dan bantu pencari di masa depan
Mawg mengatakan mengembalikan Monica

Jawaban:

13

Apakah ada misalnya beberapa log pusat atau yang serupa?

Tempat normal untuk log sistem adalah /var/log/. Apa yang dimasukkan ke dalam setiap log tergantung pada konfigurasi syslog, tetapi biasanya semuanya kecuali login /var/log/syslog.

Ini bukan jaminan bahwa masing-masing aplikasi akan meninggalkan petunjuk apa pun di sana jika terjadi masalah. Tetapi mereka, atau shell, kemungkinan akan meludahkan sesuatu ke stream error standar / standar, dan jika Anda menjalankan aplikasi yang merepotkan di latar depan dari terminal Anda akan dapat melihat hal-hal itu.

goldilocks
sumber
Apa yang harus dicari /var/log? File log mana? Apakah ada konvensi?
Jim
2
Jika Anda dapat membuat crash, lakukan, lalu lihat file mana di bawah / var / log yang paling terakhir diubah. Dengan ls -lart, file terakhir dalam daftar adalah yang paling terakhir diubah.
Devon_C_Miller
Ada konvensi s - linux jauh lebih heterogen daripada windows. Syslog merujuk ke logger sistem, tetapi tidak ada implementasi universal, dan variasi kemudian dapat dikonfigurasi dengan cara yang berbeda. Logikanya umum adalah bahwa pesan dikirim ke syslog oleh aplikasi, dan pesan-pesan ini kemudian disortir ke dalam file yang berbeda. Seperti yang disebutkan, umumnya semuanya berakhir /var/log/syslog, tetapi distro yang berbeda melakukan hal yang berbeda. Jika Anda tahu apa syslog yang Anda gunakan, Anda dapat memeriksa konfigurasinya untuk menentukan ini.
goldilocks
6

Di Ubuntu, segfault ditulis di /var/log/kern.log. Saya mengujinya dengan membuat program yang segfaults:

void main() {
    int *a=0;
    *a=0;
}

Setelah itu segfaulted ada baris ini di /var/log/kern.log:

a.out[534]: segfault at 0 ip 08048432 sp bfaec8c0 error 6 in a.out[8048000+1000]
sashoalm
sumber
1

Di Ubuntu jika Anda meluncurkan aplikasi dari file launcher .desktop, tambahkan opsi Terminal=trueke file .desktop Anda.

Selah
sumber