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

GTK+ avec C & C++ Discussion :

Comportement bizarre de mon exécutable.


Sujet :

GTK+ avec C & C++

  1. #1
    Membre éprouvé
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Par défaut Comportement bizarre de mon exécutable.
    Salut les GTK+3,

    J'ai un comportement bizarre et je crois bien que c'est lié a GTK+3 ou a ma manière de compiler.

    Le problème est si je renomme le dossier ou que je déplace mon exécutable le programme plante au démarrage erreur de pointeur Glib (j'ai pas penser au traceback exact, je vous le fournirai ultérieurement).

    Et cela est plutôt bizarre car je n'utilise que des chemins relatifs pour les dépendances.

    Ma manière de compiler:
    ====================

    La compilation est séparer d'un coté une library personnel de l'autre ma GUI et ce qui fait le lien le contrôleur.

    La library peut être de forme library static ou fichier objet (*.o).

    Le tout passé en ligne de commande dans un fichier Makefile.

    Je ne sais absolument pas du tout pourquoi cela fait ça ???

    J'ai un peu regarder du côté de Gtk::Application (car j'utilise Gtk::Main normalement) et j'ai vue que une application est|peu être limité en termes d'actions et de comportement selon son type, mais je ne comprends toujours pas ce qui se passe avec mon exécutable.

    Merci pour vos réponses éclairées.

    PS: ce n'est pas la faute de library static car ça fait pareil avec un fichier objet à la place. Et je suis sous Linux.

  2. #2
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 605
    Par défaut
    Je n'arrive pas à comprendre....

    Tu as ton répertoire de travail avec ton exécutable. Ça marche.
    Tu renommes ce répertoire et ton exécutable plante ? Et si tu compiles après avoir renommé, ça donne quoi ?

    Peux-tu essayer de faire du débogage ? Codeblocks pourrait être utile pour ça, mais il faudrait alors reconfigurer ton projet.
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  3. #3
    Membre éprouvé
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Par défaut
    Moi non plus je ne sais pas ce qui se passe.

    Pour répondre a tes questions:

    J'ai une arborescence dont un dossier contient mon exécutable et toutes ces dépendances (images, library static personnel, etc...)
    .
    Et donc si je renomme ce dossier ou un dossier parent d'ailleurs résultat mon application plante avec le traceback suivant:
    terminate called after throwing an instance of 'Glib::FileError'
    make: *** [exec] Abandon (core dump créé)
    Que je compile le code avant ou après le renommage.

    D'ailleurs je n'ouvre aucun fichier avec gtkmm au démarrage mais avec OpenCV (3) (qui dépends de GTK+3) si.

    Coté débogage je ne l'ai jamais pratiquer, et je travaille en ligne de commande pour compiler aider d'un Makefile.

    Je pense que le problème vient de gtkmm mais peut aussi venir des entrailles de make ou encore de OpenCV (parce que basé en partie sur GTK+3).

    Mais je ne sais absolument pas quoi faire nie d'ou vient exactement le problème.

    Toute aide est le bienvenue.

    Merci pour vos réponse éclairées.

  4. #4
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 308
    Billets dans le blog
    5
    Par défaut
    Ca ressemble quand même à la tentative avortée d'ouverture d'un fichier dont le chemin est incorrecte. Peut-être que tu ne testes pas le retour d'une fonction qui manipule un fichier. Si le résultat est indéterminé et que tu tentes par la suite de libérer l'espace mémoire normalement alloué tu te retrouves avec un segfault.

    Regarde de plus prés tous les chemins qui seraient codés en dur dans ton code source.

  5. #5
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 605
    Par défaut
    Si tu ne peux pas faire de pas à pas, gerald3d m'a conseillé gdb :
    Citation Envoyé par gerald3d Voir le message
    je ne comprends pas pourquoi tu mets à NULL retour. Ce pointeur pointe toujours sur un espace alloué. Tu vas avoir une fuite mémoire ici.

    Pour Gdb tu peux l'utiliser tout simplement. Tu ajoutes -g lors de la compilation. Puis tu lances ton exécutable avec Gdb : gdb mon_programme.
    Tu accèdes alors à un prompt. Tu lances depuis ce prompt "run". Ton programme se lance. Une fois qu'il a planté tu reviens au prompt. Tu peux alors taper "where" pour savoir où le programme a planté. Il te donnera la ligne exacte dans ton code source. Ensuite tu tapes toujours dans le prompt "continue" ce qui va terminer ton programme qui pour l'instant est bloqué. Enfin tu tapes "quit" pour sortir de Gdb.

    Il existe bien d'autres possibilités mais cette première utilisation te donne l'essentiel : la ligne qui pose problème.
    Ça te dira où ça plante dans ton code.
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  6. #6
    Membre éprouvé
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Par défaut
    Merci pour vos réponses,

    ne connaissant gdb que des livres et non de la (vrai) pratique je vais essayer la recette proposer.

    Information supplémentaire:
    j'ai compiler moi-même OpenCV d'après les sources et quand j'ai un traceback de OpenCV il fait référence au chemins du dossier temporaire que j'ai utiliser pour la compilation ???

    Pour dire qu'on collectionne les anomalies...

    Merci.

  7. #7
    Membre éprouvé
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Par défaut
    Ho que oui gdb,

    grâce a vos conseils éclairées j'ai découvert ce qui clochait et gerald3d avait raison c'était bien la faute une de ces sal*þris de chemin absolue.

    C'est la première fois que j'utilise gdb en situation réel en j'aurai jamais trouver d'abords sans vous et gdb.

    Même une utilisation rudimentaire, avec un minimum est sacrément efficace pour trouver des bugs comme celui la et donc debugger.

    Je vais essayer de prendre le réflexe quand je trouve pas avec des printf enfin quand c'est plus grave...

    Merci beaucoup, vous avez résolu le problème et je me coucherai moins bête ce soir.

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

Discussions similaires

  1. Comportement bizarre de mon navigateur ...
    Par hisy dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 4
    Dernier message: 30/01/2006, 11h22
  2. xsl:test .... avec comportement bizarre
    Par Blue LC dans le forum XMLRAD
    Réponses: 2
    Dernier message: 10/06/2005, 13h56
  3. [ACESS][MEMO][ISNULL]Comportement bizarre
    Par seb.49 dans le forum ASP
    Réponses: 2
    Dernier message: 09/06/2004, 10h44
  4. [HttpClient] comportement bizarre, saute des catch()...
    Par iubito dans le forum Développement Web en Java
    Réponses: 4
    Dernier message: 04/02/2004, 15h25
  5. [Sybase] Comportement bizarre d'une table
    Par sdozias dans le forum Sybase
    Réponses: 4
    Dernier message: 03/02/2004, 10h39

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