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 :

Variables aberrantes en mode Debug ?


Sujet :

C

  1. #1
    Candidat au Club
    Inscrit en
    Août 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Août 2009
    Messages : 4
    Points : 4
    Points
    4
    Par défaut Variables aberrantes en mode Debug ?
    Bonsoir,

    Je suis confronté à un problème relativement insolite, tout du moins à ma connaissance.

    Je vous explique très rapidement ce que j'observe : j'ai des variables en mémoire. J'utilise deux moyens pour en consulter le contenu :
    • Au moyen d'une fonction printf en exécution normale du programme : je trouve des valeurs attendues. Tout va bien.

    • À l'aide du debuger : là c'est le drame. Les valeurs observées pour ces mêmes variables sont tout à fait aberrantes !! À noter que les valeurs sont observées à la fois dans le debuger et par un printf. C'est comme si l'utilisation du mode debug changeait totalement la manière de fonctionner du programme !!

    Entre les deux images, le code n'a strictement pas changé ! Il n'y a de fixe dans le programme que la chaîne de caractère "Variable numero 1". Tout le reste sont des affichages de variables.

    Les variables en questions sont les champs d'un "struct" qui reprend le concept de "liste". (j'espère être clair... J'ai un struct liste, et mon "printf" affiche tout le contenu de la liste)

    Je ne sais vraiment pas comment interpréter ce souci... ça semble dépasser le code, me trompe-je ? J'ai redémarré l'ordinateur, le programme d'édition/compilation (Code::Blocks), rien n'y fait... Auriez-vous une idée ?

    Si vous avez besoin de davantage d'informations, je serais ravi de vous les donner ...

    Merci d'avance, bonne soirée.

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 369
    Points : 23 623
    Points
    23 623
    Par défaut
    Bonsoir,

    Idéalement, il faudrait que l'on voie ton code (si tu le peux, dépose-le ici encadré par les balises [code] et [/code]).

    Il y a de grandes chances pour que ton problème ait lieu en amont et qu'en particulier, ton pointeur pointe des données qui ont été libérées entre temps. Il est probable, par exemple, que tu utilises une fonction qui renvoie un pointeur vers des variables locales, variables qui cessent d'exister dès que tu sors de ta fonction.

    Si c'est le cas, tant que l'espace occupé un temps par tes variables n'a pas été utilisé par autre chose, il va rester dans le dernier état qu'il présentait et cela va te donner l'illusion que tout marche bien. Dans le cas contraire, tes données ont été écrasées et tu obtiens les valeurs indéfinies qui te rendent perplexe.

    Plus précisément, ces variables vont dans la pile, laquelle sert à toutes sortes de choses : aux variables locales mais également, et en premier lieu, à enregistrer l'adresse de retour vers la fonction appelante et sauvegarder les registres si nécessaire. En exécution normale, il est raisonnable de penser que ta fonction va directement remonter à la précédente sans autre forme de procès. En environnement de débogage, chacune de ses étapes va se traduire par une action du debugger, qui lui va appeler ses propres fonctions et faire usage de la pile.

  3. #3
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Bonjour,

    Essaye aussi de nous donner tous les warning du compilateur quand tu compile avec -Wall et -Wextra.

    Tu peux aussi regarder du côté de Valgrind pour voir si tu n'as pas un problème au niveau de tes pointeurs.

  4. #4
    Candidat au Club
    Inscrit en
    Août 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Août 2009
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par Obsidian Voir le message
    Il y a de grandes chances pour que ton problème ait lieu en amont et qu'en particulier, ton pointeur pointe des données qui ont été libérées entre temps. Il est probable, par exemple, que tu utilises une fonction qui renvoie un pointeur vers des variables locales, variables qui cessent d'exister dès que tu sors de ta fonction.
    Bonsoir,

    Merci beaucoup pour votre aide. Le problème était effectivement caché derrière ça !
    J'avais d'entrée de jeu mal codé ma liste chaînée (en définissant la valeur associée à un membre de la liste comme un pointeur ...). Maintenant, chaque maillon a sa propre case de mémoire "protégée".

    Merci à vous deux, Obsidian et Neckara. Je ne connaissais pas Valgrind, ça a l'air très utile !

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

Discussions similaires

  1. Variable Eclipse mode debug
    Par remy67 dans le forum Android
    Réponses: 1
    Dernier message: 03/06/2012, 21h07
  2. Lire contenu variable en mode debug
    Par Mister Nono dans le forum Eclipse Java
    Réponses: 0
    Dernier message: 10/06/2010, 15h58
  3. Mode debug : afficher les valeurs d'une variable
    Par zenux dans le forum Code::Blocks
    Réponses: 0
    Dernier message: 05/04/2008, 12h44
  4. [JSTL] Tester la valeur d'une variable en mode debug
    Par neowind dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 12/06/2007, 23h25
  5. Recupération lors d'un plantage (en mode debug)
    Par aRCHiMeD dans le forum MFC
    Réponses: 3
    Dernier message: 15/01/2004, 17h09

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