web-dev-qa-db-fra.com

Comment résoudre le "défaut de segmentation (noyau déchargé)"

J'utilise Ubuntu 14.04.

Après l'installation de certaines applications, j'ai rencontré une erreur de segmentation (core dumped).

Qu'est-ce que ça veut dire ? Comment puis-je résoudre ce problème?

Par exemple:

Après avoir installé chrome-stable, je rencontre cette erreur lorsque je le lance à partir du terminal.

10
Ravan

Qu'est-ce que ça veut dire?

Voir AU: Qu'est-ce qu'une erreur de segmentation? et aussi ce qui a quelques exemples pour le reproduire, SO: Qu'est-ce que l'erreur de segmentation? . la description la plus simple que je puisse venir avec (peut-être pas la parfaite):

Le programme a tenté d'accéder à une zone mémoire en dehors de sa propre section. Le système d'exploitation le bloque.

Quelques cas: Lecture de la valeur avec pointeur initialisé, dépassement des limites d'un tableau, appel de fonction (lorsque la compatibilité ascendante n'est pas maintenue), ...

Cependant, il n'est pas toujours facile de trouver la cause avec des programmes volumineux ou ceux qui reposent sur d'autres bibliothèques de projets. Et la plupart des cas se retrouvent avec un rapport de bogue, que ce soit pour le programme cible ou pour ses dépendances (projet en amont ou package de distribution en aval).

Comment puis-je résoudre ce problème?

Si vous n'avez effectué aucune configuration/installation personnalisée et que toutes les mises à jour étaient installées. Envoie un rapport de bogue , voir Comment signaler un bogue?

Si l'open source supporté par Ubuntu utilise ubuntu-bug (apport-bug). Pour les sources fermées tierces, consultez leurs pages d’aide sur la manière de signaler les bogues et de collecter les données connexes.


Remarque: Si vous avez même un peu de fond en programmation, il est recommandé de faire de votre mieux pour le résoudre vous-même. Il existe de nombreux rapports de bugs inactifs depuis des années. Ou au moins, collectez suffisamment de données de débogage pour résoudre le problème avant de le signaler.

Quelques outils utiles pour le débogage

  1. apport-bug logs/core dump/backtrace

    Si vous n'avez pas de message d'erreur avant l'erreur de segmentation. Exécutez-le avec l'option --save et recherchez le journal de suivi:

    apport-bug program-cmd --save bug-report_output.txt
    
  2. gdb code source de trace/débogage

    Si cela ne fonctionne pas, utilisez gdb:

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

    Si vous recevez un message d'erreur, vérifiez le Web, le tableau de bord et le gestionnaire de bogues de projet en amont s'il existe des cas similaires.

    Pour certains utilisateurs avancés ou qui suivent un chemin d'apprentissage c/c ++, ils peuvent télécharger les packages de symboles -dbg correspondants. Ensuite, vous pouvez utiliser gdb pour suivre le flux du programme dans la source et obtenir la fonction/instruction exacte qui génère l'erreur d'exécution.

  3. strace suivi des appels système

    Un autre outil qui peut aider est strace, je l’aime bien. C'est vraiment un outil puissant.

    Il se présente:

    Dans le cas le plus simple strace exécute la commande spécifiée jusqu'à ce qu'elle se ferme. Il intercepte et enregistre les appels système appelés par un processus et les signaux reçus par un processus. Le nom de chaque appel système, ses arguments et sa valeur de retour sont imprimés en erreur standard ou dans le fichier spécifié avec l'option -o.

    strace est un outil de diagnostic, d’instruction et de débogage utile. Les administrateurs système, les diagnostics et les dépanneurs le trouveront très utile pour résoudre les problèmes rencontrés avec des programmes pour lesquels le code source n'est pas facilement disponible, car il n'est pas nécessaire de les recompiler pour les localiser. Les étudiants, les hackers et les plus curieux constateront que beaucoup de choses peuvent être apprises sur un système et ses appels système en traçant même des programmes ordinaires. Et les programmeurs constateront que, puisque les appels système et les signaux sont des événements qui se produisent sur l'interface utilisateur/noyau, un examen minutieux de cette limite est très utile pour l'isolation des bogues, la vérification de la cohérence et la tentative de capture des conditions de concurrence.

    Source: man strace

  4. ltrace suivi des appels de la bibliothèque dynamique

    ltrace est un programme qui exécute simplement la commande spécifiée jusqu'à ce qu'il se ferme. Il intercepte et enregistre les appels dynamiques de la bibliothèque appelés par le processus exécuté et les signaux reçus par ce processus. Il peut également intercepter et imprimer les appels système créés par le programme.

    Son utilisation est très similaire à strace (1).

    Source: man ltrace

10
user.dz