IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

SegFault / Fichier core


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 114
    Par défaut SegFault / Fichier core
    Bonjour

    Je suis sous Debian 5.0.3 avec Python 3.1.2.
    Mon programme est wrappé avec des librairies en C, et j'ai parfois des segfault.
    Mon programme est un deamon, donc il n'est pas facile d'utilisé gdb en live.
    Pour un programme en C, je laisse le programme se planter, produire un fichier core et je fais une analyse post-mortem avec gdb.

    J'ai voulu faire la même chose avec mon programme python. Cependant, je galère un peu pour récupérer mon fichier core.

    Est-ce Python n'intercepterait pas les signaux SIGSEG (segment fault) et empêcherait la génération des fichiers core ?

    Cordialement
    Emmanuel

  2. #2
    Membre chevronné
    Profil pro
    Ingénieur sécurité
    Inscrit en
    Février 2007
    Messages
    574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 574
    Par défaut
    Salut,
    J'avais pas eu de problème en python 2.5 avec les core dump. Après en v3.1, je sais pas.
    Les core dump sont bien actifs?
    et t'as bien compilé tes extensions avec l'option -dH et/ou -g?
    Sinon, je vois pas trop...
    Bon courage

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 114
    Par défaut
    Bonjour

    J'ai bien vérifié :
    ulimit -c unlimited

    le home (cwd) est OK.

    J'ai un autre process écrit en C, et lui j'ai bien des fichiers core.
    Avant le core, j'ai cherché des indices dans /proc/NNNN/ et pour l'instant je ne vois pas de différence entre le process qui génère un core et mon process python

    Cordialement
    Emmanuel

  4. #4
    Membre émérite
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 758
    Par défaut
    bonjour,

    tu as une appli python non pure et la compilation de la partie C est générée par toi même ou par les distutils ?

    quel compilateur utilises tu ?

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 114
    Par défaut
    Citation Envoyé par kango Voir le message
    tu as une appli python non pure
    non, mixe : Python et C

    et la compilation de la partie C est générée par toi même ou par les distutils ?
    Je maitrise la compilation.

    quel compilateur utilises tu ?
    gcc --version
    gcc (Debian 4.3.2-1.1) 4.3.2


    J'ai fait un test avec un petit programme à lancer en ligne de commande, j'ai bien un fichier core.

    Par contre, le programme que je souhaite debuggé, il refuse obstinément de générer un core.

    A cette adresse http://kasperd.net/~kasperd/comp.os....pment.faq#core
    J'ai lu cette phrase qui m'inquiète :

    Some kernel versions cannot dump processes with shared address space (AKA threads). Newer kernel versions can dump such processes but will append the pid to the filename.

    Si quelqu'un connaissait les versions exact ...


    Cordialement
    Emmanuel

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 114
    Par défaut
    Bonjour

    Pour info,

    un processus fils du processus que je veux débugger peut générer un core.
    Donc il ne s'agirait pas d'une variable quelconque mal positionnée.


    Cordialement
    Emmanuel

  7. #7
    Membre chevronné
    Profil pro
    Ingénieur sécurité
    Inscrit en
    Février 2007
    Messages
    574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 574
    Par défaut
    Je m'auto-cite, mais
    Citation Envoyé par dahtah Voir le message
    t'as bien compilé tes extensions avec l'option -dH et/ou -g?
    voir ici pour les options utiles.

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 114
    Par défaut
    Citation Envoyé par dahtah Voir le message
    voir ici pour les options utiles.
    Bonjour

    Dans mon cas, j'ai éliminé les problèmes d'option de compilation.
    Dans mon code C, qui est compilé en lib.so est qui est appelé depuis le python via un wrapper, j'ai inséré une fonction comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    void SegFault()
    {
      int *pc;
     
      pc = NULL;
     
      *pc =1
    }
    Ensuite, j'ai fait un programme python, avec un wrapper vers ma librairie C :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    import ma_lib
     
    ma_lib.SegFault()
    Dans ce cas, le lancement de python ./simple_segfault.py déclenche bien un SegFault avec apparition de fichier core.

    Ensuite, dans mon vrai programme en python, j'ai inséré cet appel sur une commande que je peux déclencher quand je veux.
    Suite à l'appel, j'ai bien un segfault (avec un message dans syslog qui me confirme le segfault dans ma librairie avec les bonnes adresses ip j'ai tout vérifié), mais aucun fichier core apparait.

    Etape suivante, de mon vrai programme, au lieu d'appeler directement la fonction SegFault, je lance dans un processus fils un appel vers mon programme python simple_segfault.py cité plus haut. Dans ce cas, j'ai bien un fichier core qui apparait.

    J'ai actuellement deux pistes :
    1, je dois faire appel à un mécanisme qui empêche la génération de fichier core : mémoire partagé, IPC etc.
    2, il doit exister dans import un détournement du signal SIGSEGV

    Il me faut un peu de temps pour explorer toutes ces pistes.

    Cordialement
    Emmanuel

  9. #9
    Membre chevronné
    Profil pro
    Ingénieur sécurité
    Inscrit en
    Février 2007
    Messages
    574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 574
    Par défaut
    Ok.
    Si tu trouves, la solution m'intéresse...

Discussions similaires

  1. Réponses: 3
    Dernier message: 27/02/2013, 09h51
  2. fichier core erreur
    Par boss49 dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 28/04/2009, 20h38
  3. lire et interpréter un fichier core
    Par medora dans le forum Sécurité
    Réponses: 3
    Dernier message: 20/04/2007, 12h05
  4. C'est quoi les fichier "core" ?
    Par Hanslip dans le forum Mandriva / Mageia
    Réponses: 3
    Dernier message: 12/12/2006, 10h44
  5. Génerer un fichier core..
    Par def_jam_vendetta dans le forum C
    Réponses: 3
    Dernier message: 02/02/2006, 10h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo