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 :

l'utilisation de gbd


Sujet :

C

  1. #1
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2012
    Messages : 67
    Points : 43
    Points
    43
    Par défaut l'utilisation de gbd
    Bonjour tous le monde.
    toujours avec les images bmp, le code se compile correctement mais s'arrrete à l'execution avec un messade d'erreur j'ai apllique le gdb pour detecter l'arret de programme.
    voila le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Program received signal SIGSEGV, Segmentation fault.
    0x08048a8d in Sauver ()
    (gdb)
    j'ai rien compris. aidez moi/

  2. #2
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    Citation Envoyé par hadjira10 Voir le message
    j'ai apllique le gdb pour detecter l'arret de programme.
    avant de lancer gdb il faut compiler ton programme avec le flag -ggdb, de cette manière gdb te donnera des informations plus lisibles sur ton code C
    sinon, quand tu compiles ton code source en C est transcrit en code machine, gdb ne travaille pas avec ton code source en langage C directement, il travaille avec le code machine, et donc il faut comprendre l'assembleur, l'option -ggdb dit à gcc de générer des symboles de debugging pour que gdb sache faire le lien entre le code machine du binaire qui s'exécute et le code source que tu as écris

    Citation Envoyé par hadjira10 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Program received signal SIGSEGV, Segmentation fault.
    0x08048a8d in Sauver ()
    (gdb)
    la partie intéressante c'est le in Sauver() qui te dit dans quelle fonction le programme a planté, c'est donc probablement par là qu'il faut chercher

    pour le reste on ne peut pas t'aider plus, prends l'habitude -encore une fois- de nous donner l'ensemble des éléments qui permettront de t'aider, on ne connait pas ton projet, on a pas ton code source, on a pas les images que tu utilises, on ne sait pas comment tu lances ton programme, etc.
    on veut bien t'aider mais on n'a pas envie de jouer aux devinettes, c'est pas la première fois qu'on te le dit (cf. tes précédents sujets)

    par ailleurs, as-tu appliqué les conseils qu'on t'a donné précédemment pour un problème similaire ?

  3. #3
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2012
    Messages : 67
    Points : 43
    Points
    43
    Par défaut
    merci mais pour le code source j'ai eu un probleme dans les pieces jointes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gcc -Wall 01_09_02_testbmp.c 01_09_02_bmp.c -o bmptrait && ./bmptrait
    apres
    et run
    enfin s'affiche le message precedent.
    code.zip

  4. #4
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    sans avoir trop regardé le code en profondeur;

    dans 01_09_02_testbmp.c on trouve :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        I = Charger("001.bmp");
        Sauver(I,"test1.bmp");
    c'est à dire que tu passes I à la fonction Sauver() sans vérification d'aucune sorte
    pourtant dans 01_09_02_bmp.c on peut lire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        if (head.imhead.bpp!=24)
            return NULL;  // supporte que le 24 bits pour l'instant
    ce qui veut dire que si le fichier 001.bmp n'est pas une image BMP 24bits, I = NULL et la fonction Sauver() ne le sait pas

    tadaaa:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ file 001.bmp 
    001.bmp: PC bitmap, Windows 3.x format, 255 x 255 x 8
    tiens compte des remarques qu'on te fait hadjira10, vérifie le retour des fonctions que tu utilises (celles de la libc et les tiennes, celles que tu crées) et gère les cas d'erreur en mettant des messages explicites !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        if (head.imhead.bpp!=24) {
            printf ("supporte que le 24 bits pour l'instant\n");
            return NULL;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        I = Charger("001.bmp");
        if (!I) {
            printf ("erreur lors du chargement, on quitte\n");
            return -1;
        }
        Sauver(I,"test1.bmp");
    enfin, comme je te disais plus haut si tu veux debugger avec gdb compile en rajoutant le flag -ggdb :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $ gcc -Wall -ggdb 01_09_02_testbmp.c 01_09_02_bmp.c -o bmptrait
    01_09_02_testbmp.c: In function ‘main’:
    01_09_02_testbmp.c:5:8: attention : unused variable ‘j’ [-Wunused-variable]
    01_09_02_testbmp.c:5:6: attention : unused variable ‘i’ [-Wunused-variable]
    $ gdb -q ./bmptrait
    Reading symbols from (...)/bmptrait...done.
    (gdb) run
    Starting program: (...)/bmptrait 
    Program received signal SIGSEGV, Segmentation fault.
    0x08048aae in Sauver (I=0x0, fichier=0x8048d18 "test1.bmp") at 01_09_02_bmp.c:133
    133             head.imhead.width = I->w;

  5. #5
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2012
    Messages : 67
    Points : 43
    Points
    43
    Par défaut

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. utiliser les tag [MFC] [Win32] [.NET] [C++/CLI]
    Par hiko-seijuro dans le forum Visual C++
    Réponses: 8
    Dernier message: 08/06/2005, 15h57
  2. Réponses: 4
    Dernier message: 05/06/2002, 14h35
  3. utilisation du meta type ANY
    Par Anonymous dans le forum CORBA
    Réponses: 1
    Dernier message: 15/04/2002, 12h36
  4. [BCB5] Utilisation des Ressources (.res)
    Par Vince78 dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/04/2002, 16h01
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

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