GNU/Linux >> Tutoriels Linux >  >> Linux

Core dumpé, mais le fichier core n'est pas dans le répertoire courant ?

Lisez /usr/src/linux/Documentation/sysctl/kernel.txt.

core_pattern est utilisé pour spécifier un nom de modèle de fichier de vidage principal.

  • Si le premier caractère du motif est un '|', le noyau traitera le reste du motif comme une commande à exécuter. Le vidage mémoire sera écrit dans l'entrée standard de ce programme au lieu d'un fichier.

Au lieu d'écrire le vidage mémoire sur le disque, votre système est configuré pour l'envoyer au abrt (c'est-à-dire :outil de rapport de bogue automatisé, pas programme "abandon") à la place. L'outil de rapport de bogue automatisé n'est peut-être pas aussi documenté qu'il devrait l'être...

Dans tous les cas, la réponse rapide est que vous devriez pouvoir trouver votre fichier core dans /var/cache/abrt , où abrt le stocke après avoir été invoqué. De même, d'autres systèmes utilisant Apport peuvent écumer les cœurs dans /var/crash , et ainsi de suite.


Sur Ubuntu récent (12.04 dans mon cas), il est possible que "Segmentation fault (core dumped)" soit imprimé, mais aucun fichier core n'est produit là où vous pourriez vous y attendre (par exemple pour un programme compilé localement).

Cela peut arriver si vous avez une taille de fichier core ulimit de 0 (vous n'avez pas fait ulimit -c unlimited ) -- c'est la valeur par défaut sur Ubuntu. Normalement, cela supprimerait le "(core dumped)", vous indiquant votre erreur, mais sur Ubuntu, les corefiles sont redirigés vers Apport (le système de rapport de plantage d'Ubuntu) via /proc/sys/kernel/core_pattern , et cela semble provoquer le message trompeur.

Si Apport découvre que le programme en question n'en est pas un, il devrait signaler les plantages (ce que vous pouvez voir se produire dans /var/log/apport.log ), il revient à simuler le comportement par défaut du noyau consistant à placer un fichier core dans le cwd (cela se fait dans le script /usr/share/apport/apport ). Cela inclut le respect de ulimit, auquel cas il ne fait rien. Mais (je suppose) en ce qui concerne le noyau, un corefile a été généré (et redirigé vers apport), d'où le message "Segmentation fault (core dumped)".

En fin de compte, PEBKAC pour avoir oublié de définir ulimit, mais le message trompeur m'a fait penser que je devenais fou pendant un moment, me demandant ce qui mangeait mes fichiers core.

(Aussi, en général, la page de manuel core(5) -- man 5 core -- est une bonne référence pour savoir où se trouve votre fichier principal et les raisons pour lesquelles il pourrait ne pas être écrit.)


Linux
  1. Comment créer une nouvelle fenêtre sur le répertoire actuel dans Tmux ?

  2. SVN vérifie le contenu d'un dossier, pas le dossier lui-même

  3. Trouver les fichiers existant dans un répertoire mais pas dans l'autre

  4. Comment quitter l'explorateur de fichiers Ranger pour revenir à l'invite de commande tout en conservant le répertoire actuel ?

  5. sudo -i mais conserve le répertoire de travail actuel

Comment trouver le fichier le plus ancien dans une arborescence de répertoires sous Linux

Pourquoi la méthode suivante ne modifie-t-elle pas la taille limite du fichier principal ?

Comment copier un fichier d'un autre répertoire vers celui en cours ?

file_put_contents ne crée pas de fichier txt

Comment obtenir le répertoire absolu d'un fichier dans bash ?

L'utilisation de chown pour changer le groupe propriétaire d'un répertoire n'est pas autorisée... Pourquoi ?