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

GDB Discussion :

backtrace peu claire


Sujet :

GDB

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 12
    Points : 7
    Points
    7
    Par défaut backtrace peu claire
    Bonjour à tous,

    dans le développement d'un éxecutable codé en c++ j'utilise régulièrement gdb sans être un expert de l'outil,
    je me heurte depuis quelques temps à des plantages peu réguliers mais que je trouve assez aléatoires (avec les mêmes données le plantage n'est pas systématique)

    l'analyse du fichier core me donne dans ces cas toujours un résultat semblable qui me laisse songeur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Program terminated with signal 11, Segmentation fault.
    ...
    (gdb) bt
    #0  0x00000030e907324d in ?? ()
    #1  0x0000000000000000 in ?? ()
    est-ce que ça parle à quelq'un?

    par ailleurs difficile pour moi de lancer l'exécution sous gdb car le bug n'est pas forcément reproductible et les éxécutions très longues


    merci de votre aide par avance!

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 49
    Points : 53
    Points
    53
    Par défaut
    c'est presque normal ...

    ta pile est bousillée, quand gdb veut l'utiliser pour retrouver l'adresse/nom des fonctions appelantes, il affiche ce qu'il peut : c'est à dire pas grand chose

    1/ Le bug de ton programme altère (au minimum) les infos de la pile
    par exemple, une var tableau sur la pile dont on explose l'index
    memset(mavar, 0, tailleDelirante)
    2/ l'exception se produit, et gdb prend la main

    3/ il parcourt la pile et essaie d'associer des noms/infos aux adresses.
    Pas de bol, les adresses sont délirantes, donc gdb ne peut pas afficher autre chose que des valeurs

    La difficulté dans ce cas, c'est que le bug se produit bien avant que gdb ne prenne la main.
    La 1° chose à faire est de relire le code et de regarder tout ce qui ressemble à des memset/memcpy

    sinon tu peux mettre des watchpoint sur les adresses de retour dans la pile. Dès que le bug de ton prog commence à écraser la pile, gdb prend la main.
    (regarde la doc gdb sur 'awatch' et surtout http://www.outflux.net/blog/archives...s-they-happen/

    sinon tu peux truffer tes sources de assert() pour essayer de détecter les pb au plus tôt

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    je vais me pencher là-dessus, merci de ton aide

Discussions similaires

  1. Peut on rendre ce code un peu plus clair ?
    Par mchk0123 dans le forum Haskell
    Réponses: 9
    Dernier message: 16/05/2008, 04h57
  2. DirectX 6, un peu en retard ... :\
    Par multani dans le forum DirectX
    Réponses: 3
    Dernier message: 28/05/2002, 19h19

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