Comment pouvons-nous suivre les problèmes de plantage de programmes sous Linux?

12

Si une application se bloque dans Windows, nous pouvons vérifier l'Observateur d'événements dans les outils d'administration pour voir ce qui s'est bloqué. Parfois, il contient des informations utiles, d'autres non, mais c'est un début.
Sous Linux, si une application (n'importe laquelle) plante, comment commencer à retracer ce qui s'est passé?
Existe-t-il, par exemple, un journal central ou quelque chose de similaire?

Jim
la source
2
La manière standard de déboguer ce genre de chose est de lancer manuellement l'application problématique depuis un terminal. De cette façon, vous pouvez voir tous les messages d'erreur imprimés.
terdon
2
Les versions 64 bits de Linux enregistreront une brève description d'un processus en panne (celui qui est mort à cause d'un signal) dans /var/log/syslog. Linux permet à un démon d'être averti des pannes de processus. Ubuntu de apport et de Red Hat ABRT Utilisez cette option pour fournir une journalisation centralisée et les installations de production de rapports. Généralement, un vidage de mémoire est enregistré afin que vous puissiez invoquer un débogueur sur le programme bloqué.
Mark Plotnick
J'aurais voté pour cette question, mais le PO ne semble pas vouloir aider la communauté en acceptant ou en affichant une réponse, je vais donc trouver une question similaire qui accepte une réponse et voter pour, dans l'espoir que cela atteindre le sommet des résultats de recherche et aider les futurs chercheurs
Mawg dit de réintégrer Monica

Réponses:

13

Existe-t-il, par exemple, un journal central ou quelque chose de similaire?

L'endroit normal pour les journaux système est /var/log/. Ce qui est mis dans chaque journal dépend de la configuration de Syslog, mais généralement tout sauf les connexions est envoyé /var/log/syslog.

Cela ne garantit pas que les applications individuelles y auront laissé la moindre trace en cas de problème. Mais eux, ou le shell, cracheront probablement quelque chose dans les flux d'erreur standard out / standard, et si vous exécutez une application gênante au premier plan à partir d'un terminal, vous pourrez voir ce genre de choses.

boucle d'or
la source
Que faut-il rechercher dans /var/logquel fichier journal, y a-t-il une convention?
Jim
2
Si vous pouvez provoquer le crash, faites-le, puis voyez quel fichier sous / var / log a été modifié le plus récemment. Avec ls -lart, le dernier fichier de la liste a été le plus récemment modifié.
Devon_C_Miller
Il existe des conventions s -linux est beaucoup plus hétérogène que windows. Syslog fait référence à l'enregistreur système, mais il n'y a pas d'implémentation universelle, et les variantes peuvent ensuite être configurées de différentes manières. La logique générale est que les messages sont envoyés à syslog par l'application, et ces messages sont ensuite triés dans des fichiers différents. Comme mentionné, généralement tout se termine /var/log/syslog, mais différentes distributions font les choses différemment. Si vous savez quel syslog vous utilisez, vous pouvez examiner sa configuration pour le déterminer.
goldilocks
6

Sur Ubuntu, les erreurs de segmentation sont écrites sur /var/log/kern.log. Je l'ai testé en créant un programme qui segfaults:

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

Après la panne, il y avait cette ligne dans /var/log/kern.log:

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

Dans Ubuntu, si vous lancez votre application à partir d'un fichier de lancement .desktop, ajoutez l'option Terminal=trueà votre fichier .desktop.

Selah
la source