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

C Discussion :

Difficulté pour utiliser gdb et un coredump


Sujet :

C

  1. #1
    Membre averti Avatar de awalter1
    Inscrit en
    Août 2004
    Messages
    994
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 994
    Points : 407
    Points
    407
    Par défaut Difficulté pour utiliser gdb et un coredump
    Bonjour,

    Je travaille sous linux RedHat 4.
    Mon application C / X11 /Motif plante avec un segmentation fault.
    Avec valgrind j'arrive à avoir le renseignement suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ==28478== Invalid write of size 4
    ==28478==    at 0x804E041: put_the_data (exp_hmi_excel.c:396)
    ==28450==    by 0x3A: ???
    ==28450==  Address 0xBEEDAE44 is just below the stack ptr.  To suppress, use: --workaround-gcc296-bugs=yes
    Cette ligne corresponds à un "return FALSE" dans une procédure appelée par un "XtAppAddWorkProc"; ce return permet de redonner la main à la boucle X. Autrement dit la référence à cette ligne est inexploitable.

    Je n'avais pas de fichier core, en cherchant, j'ai trouvé que la commande ulimit permet de définir la taille du fichier. Cette commande ne marche pas en csh. Je suis passé en bash et ai défini une taille non nulle pour mon fichier core.
    Une fois le fichier core généré, j'ai fait :
    gdb ./<executable> ./<core file>
    et j'obtiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    This GDB was configured as "i386-redhat-linux-gnu"...Using host libthread_db library "/lib/tls/libthread_db.so.1".
     
    Core was generated by `'.
    Program terminated with signal 11, Segmentation fault.
    Reading symbols from /usr/lib/valgrind/x86-linux/vgpreload_core.so...done.
    Loaded symbols for /usr/lib/valgrind/x86-linux/vgpreload_core.so
    Reading symbols from /usr/lib/valgrind/x86-linux/vgpreload_memcheck.so...done.
    Loaded symbols for /usr/lib/valgrind/x86-linux/vgpreload_memcheck.so
    Reading symbols from /oracle/oracle10/lib/libclntsh.so.10.1...done.
    Loaded symbols for /oracle/oracle10/lib/libclntsh.so.10.1
    Loaded symbols for /usr/X11R6/lib/X11/locale/lib/common/ximcp.so.2
    Reading symbols from /lib/libnss_files.so.2...done.
    Loaded symbols for /lib/libnss_files.so.2
    #0  0x0000000a in ?? ()
    Donc aucune référence à un de mes fichiers sources !

    Coment puis je avancer ?

    Merci de votre aide

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Plusieurs solutions, mais aucune facile

    Pour une raison simple, c'est que X est asynchrone..

    Donc, première chose, d'abord utiliser ddd et non gdb. Interface graphique beaucoup plus conviviale et facile à manipuler.

    Secondo, mettre des "fprintf(stderr, ..." dans les endroits sensibles.

    Tertio, une fois en gros le bout de code localisé, mettre X en synchrone autour de ce qui est nécessaire (attention : du coup ça devient beaucoup plus lent).

    Pour mettre X en synchrone, faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    XSynchronize ( dpy, True);


    Pour enlever la synchronisation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    XSynchronize ( dpy, False);
    XSync ( dpy, False) ;
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  3. #3
    Membre averti Avatar de awalter1
    Inscrit en
    Août 2004
    Messages
    994
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 994
    Points : 407
    Points
    407
    Par défaut
    Merci, je vais essayer cela.
    je vous tiens au courant.

Discussions similaires

  1. Difficultées pour utiliser ASSIMP
    Par radlabo94 dans le forum C++
    Réponses: 2
    Dernier message: 04/05/2015, 09h05
  2. Difficultés pour utiliser validate() d'un ActionForm
    Par hadler dans le forum Struts 1
    Réponses: 3
    Dernier message: 05/04/2012, 20h04
  3. difficultés pour insérer et utiliser un tableau
    Par rorox dans le forum Delphi
    Réponses: 18
    Dernier message: 12/07/2006, 12h17
  4. Difficulté pour utiliser progressBar
    Par iam dans le forum Bases de données
    Réponses: 2
    Dernier message: 07/06/2006, 13h47
  5. [JNI] Difficultés pour utiliser une DLL
    Par etiennegaloup dans le forum Entrée/Sortie
    Réponses: 10
    Dernier message: 15/08/2005, 21h29

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