Come possiamo rintracciare i problemi di crash dei programmi in Linux?


12

Se un'applicazione si arresta in modo anomalo in Windows, possiamo controllare il Visualizzatore eventi negli strumenti di amministrazione per vedere cosa è andato in crash. A volte contiene informazioni utili, altre no, ma è un inizio.
In Linux se un'applicazione (qualsiasi) si blocca come si inizia a tracciare cosa è successo?
Esiste un registro centrale o qualcosa di simile?


2
Il modo standard di eseguire il debug di questo tipo di cose è quello di avviare manualmente l'applicazione problematica da un terminale. In questo modo è possibile visualizzare tutti i messaggi di errore stampati.
terdon

2
Le versioni a 64 bit di Linux registreranno una breve descrizione di un processo bloccato (uno che è morto a causa di un segnale) /var/log/syslog. Linux fornisce un modo per avvisare un demone degli arresti anomali del processo. Di Ubuntu apport e di Red Hat abrt uso questo per fornire registrazione e la relazione generazione strutture centralizzate. Generalmente un dump principale viene salvato in modo da poter invocare un debugger sul programma bloccato.
Mark Plotnick,

Avrei votato a favore di questa domanda, ma l'OP non sembra voler aiutare la comunità accettando o pubblicando una risposta, quindi troverò una domanda simile che accetta una risposta e la voterò, nella speranza che lo farà salire in cima ai risultati di ricerca e aiutare i futuri ricercatori
Mawg dice di reintegrare Monica il

Risposte:


13

Esiste un registro centrale o qualcosa di simile?

Il posto normale per i registri di sistema è /var/log/. Ciò che viene inserito in ciascun registro dipende dalla configurazione di syslog, ma generalmente tutto tranne gli accessi vanno a /var/log/syslog.

Ciò non garantisce che le singole applicazioni abbiano lasciato indizi in caso di problemi. Ma loro, o la shell, probabilmente sputeranno qualcosa ai flussi di errore standard / out standard, e se esegui un'applicazione problematica in primo piano da un terminale sarai in grado di vedere quella roba.


Cosa cercare in /var/log? Quale file di registro? C'è qualche convenzione?
Jim,

2
Se riesci a far accadere il crash, fallo, quindi vedi quale file in / var / log è stato modificato più di recente. Con ls -lart, l'ultimo file nell'elenco è stato modificato più di recente.
Devon_C_Miller

Ci sono convenzioni s - linux è molto più eterogeneo di windows. Syslog si riferisce al logger di sistema, ma non esiste un'implementazione universale e le varianti possono quindi essere configurate in diversi modi. La logica generale è che i messaggi vengono inviati a syslog dall'applicazione e questi messaggi vengono quindi ordinati in file diversi. Come accennato, generalmente tutto finisce /var/log/syslog, ma diverse distro fanno le cose in modo diverso. Se sai quale syslog stai utilizzando, puoi esaminarne la configurazione per determinarlo.
Riccioli d'oro

6

Su Ubuntu i segfault vengono scritti su /var/log/kern.log. L'ho provato creando un programma che segfault:

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

Dopo la segfault c'era questa linea in /var/log/kern.log:

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

1

In Ubuntu se si avvia l'applicazione da un file di avvio .desktop, aggiungere l'opzione Terminal=trueal file .desktop.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.