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 :

[debug] Problème hallucinant


Sujet :

C

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2013
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2013
    Messages : 31
    Points : 37
    Points
    37
    Par défaut [debug] Problème hallucinant
    Bonjour,

    Je suis etudiant en informatique et apres un petit moment a faire du xml, java, ... ; je me suis un remit dans mes codes C qui fonctionnaient plutot bien dans mes souvenirs mais qui ne fonctionne plus en partie et la raison .... un appel de fonction qui fonctionne seul mais pas dans une boucle de test avec une fonction de delay

    Pour essayer de clarifier les choses, j'ai simplifier le code pour tester pas a pas et remonter a mon code original débugé et la, j'ai un code plus simple que du Hello world qui ne fonctionne pas !

    voici ce code :
    j'ai remplacé l'appel de fonction par le printf * , le delay par une boucle bidon et les valeurs de la boucle ne sont plus des variables de mon programme mais des entiers tous simples

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    	int t, i = 0;
    	//
    	for (t=0; t<100; t++)
    	{
    		printf("*");
    		i = 0;
    		do
    		{
    			i++;
    		}
    		while(i < 1000000);
    	}
    a l'execution : un peu d'attente et toutes les * d'un coup !!!

  2. #2
    Membre confirmé
    Femme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2009
    Messages : 236
    Points : 491
    Points
    491
    Par défaut
    Salut,

    Je peux me tromper mais je pense que c'est une question de buffer. En effet printf possède un buffer, et n'affiche pas instantanément à la différence de fprintf. Essaie d'ajouter un flush apres ton printf.

    Autre chose: a ta place j'utiliserai wait() plutot qu'une boucle si tu souhaite ralentir ton execution

  3. #3
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 374
    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 374
    Points : 23 632
    Points
    23 632
    Par défaut
    Citation Envoyé par 0xNoob Voir le message
    a l'execution : un peu d'attente et toutes les * d'un coup !!!
    C'est effectivement dû aux buffers de lignes : par défaut, la sortie standard n'est envoyée vers sa destination finale que lorsque tu écris un retour à la ligne ou que tu refermes le fichier. Il existe setbuf() pour modifier ce comportement.
    Sache également que la sortie d'erreur standard, elle, n'est pas bufferisée.

    Citation Envoyé par Malinaka Voir le message
    Salut,
    Je peux me tromper mais je pense que c'est une question de buffer. En effet printf possède un buffer, et n'affiche pas instantanément à la différence de fprintf. Essaie d'ajouter un flush apres ton printf.
    Pas flush() mais fflush() (File Flush).

    Autre chose: a ta place j'utiliserai wait() plutot qu'une boucle si tu souhaite ralentir ton execution
    Pas wait() non plus (qui sert à attendre la fin d'un processus fils) mais sleep().

  4. #4
    Membre confirmé
    Femme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2009
    Messages : 236
    Points : 491
    Points
    491
    Par défaut
    Exact , autant pour moi

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2013
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2013
    Messages : 31
    Points : 37
    Points
    37
    Par défaut
    Merci pour vos réponses.

    Ce detail de buffer m'était completement sorti de l'esprit lol
    le fflush(stdout) fonctionne

    si ca vous interesse en fait la fonction (a la pacle de printf'("*") ) sert a afficher une barre de progression

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

Discussions similaires

  1. Inspection des variables en debug - problème
    Par Pocus dans le forum EDI
    Réponses: 10
    Dernier message: 08/12/2017, 15h31
  2. Réponses: 0
    Dernier message: 29/12/2010, 12h00
  3. PDT plugin Eclipse Debug problème
    Par progamer54 dans le forum Eclipse PHP
    Réponses: 5
    Dernier message: 31/10/2009, 01h39
  4. [Visual Studio 2005 Debug]Problème de debug
    Par Astraya dans le forum Visual Studio
    Réponses: 1
    Dernier message: 12/02/2009, 10h53
  5. [Debug]Problème d'arrêt
    Par le Daoud dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 02/06/2005, 20h18

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