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

Visual C++ Discussion :

[Vicual C++ 6.0] différence entre Execute(CTRL+F5) et Go(F5) / recherche de bug


Sujet :

Visual C++

  1. #1
    Membre régulier
    Inscrit en
    Juillet 2006
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 75
    Points : 76
    Points
    76
    Par défaut [Vicual C++ 6.0] différence entre Execute(CTRL+F5) et Go(F5) / recherche de bug
    Hello,
    Voilà mon souci : je développe une application MFC dialog based. La boite de dialogue me sert d'interface. J'ai ajouté un thread pour tout ce qui est calcul, analyse...etc. Ce thread démarre et s'arrête avec l'application. Il s'agit d'un CWinThread démarré par AfxBeginThread().

    Quand j'exécute mon programme compilé en Debug ou en Release celui ci plante au bout de quelques heures : apparement le thread d'analyse ne tourne plus (bien qu'il existe encore).

    En revanche quand j'exécute mon programme à partir de la commande Go de visual celui-ci tourne sans problème des jours et des jours... le bug a disparu !!!

    d'ou ma question : quelles différences y a t il entre une exécution classique du fichier exe compilé en debug et une exécution "Go". Est ce que visual réserve des zone mémoires plus grandes ou ce genre de trucs ?

    J'ai lu ici ou là qu'avec les MFC le multithreading n'était pas très sûr (fuite mémoire...etc.) Est ce que mon plantage pourrait être lié à çà ?

    Merci

  2. #2
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    salut,
    tu fais fausse route,
    si ton programme plante en release ,c'est qu'il y a un bug et c'est souvent un débordement mémoire qui en est la cause.
    et quelque soit le mode de lancement du programme .
    si ton programme plante aussi en debug le problème devrait être facile à résoudre.
    il suffit sur la ligne d'erreur de remonter la pile des appels jusqu'au ton code et regarder la ligne qui cause un problème.
    ps: travailler avec un thread en MFC impose des contraintes :
    http://c.developpez.com/faq/vc/?page...d#WorkerThread
    avec un boite de dialogue il vaudra mieux utiliser PostMessage.

  3. #3
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Son problème n'est pas "ça plante en release".
    Si tu relis son post, tu verras que le problème est "ça plante en debug comme en release hors du debugger, et le bug n'est pas reproductible dans le debugger"...

  4. #4
    Membre régulier
    Inscrit en
    Juillet 2006
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 75
    Points : 76
    Points
    76
    Par défaut
    Mon thread est créé dans les règles de l'art (je m'étais appuyé en parti sur cette FAQ au début du développement) : des variables globales pour la communication boite de dialogue --> thread et PostMessage dans l'autre sens

    Et effectivement Médinoc a bien cerné le problème. Je plante de la même manière avec une compil release ou debug.... sauf dans le debbuger, ce qui ne me permet pas d'avoir accès à la pile des appels... ce serait trop facil sinon !!!

  5. #5
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    hé bien tu es dans le cas le plus difficile à resoudre ...
    quel est le message que tu obtiens quand ça plante ?
    tu as surveillé les ressources (memoire ,objet gdi etc) quand tu executes ton programme ? (avec le gestionnaire de taches)

  6. #6
    Membre régulier
    Inscrit en
    Juillet 2006
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 75
    Points : 76
    Points
    76
    Par défaut
    Quand çà plante j'ai le comportement suivant : l'application semble figée. Le thread est "mort" : bien qu'il existe encore il ne fait plus rien, comme bloqué. Du coup plus aucun résultat n'est mis à jour, plus aucune courbe s'affiche...etc. En revanche la boite de dialogue "vie" toujours correctement : si j'appuie sur un bouton qui n'a aucune interaction avec le thread (ex:affichage d'une autre boite de dialogue...etc.) tout ce passe bien.

    Et pour facilité les choses le plantage arrive aléatoirement dans le temps (au bout de quelques heures ou de quelques jours) sans prévenir, pas de message d'erreur, rien !

    Coté ressource avec le task manager je n'est pas de fuite de mémoire (physique ou virtuelle). Pas d'envolé non plus du nombre de handle ou de trucs comme çà.

  7. #7
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    tu as des attentes dans ton thread (Attente d'un évenement signalé etc) ?

  8. #8
    Membre régulier
    Inscrit en
    Juillet 2006
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 75
    Points : 76
    Points
    76
    Par défaut
    Oui j'ai des mutex pour proteger divers éléments mais j'ai vérifié avec WINOBJ que lorsque je plante je ne suis pas dans un deadlock

  9. #9
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    tes mutex ils sont avec des attentes infinies ?

  10. #10
    Membre régulier
    Inscrit en
    Juillet 2006
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 75
    Points : 76
    Points
    76
    Par défaut
    oui
    un mutex avec une attente infinie peu poser d'autres problèmes que le Deadlock ?

  11. #11
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    si il n'est pas relâché tu peux avoir le problème que tu décris : le thread bloqué
    ...

  12. #12
    Membre émérite
    Avatar de la drogue c'est mal
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    2 253
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 2 253
    Points : 2 747
    Points
    2 747
    Par défaut
    meme avec ctrl+F5 en debug, si il y a un crash, tu peux aller à la ligne ou cela à planter. Apres il faut aller dans le bon thread

  13. #13
    Membre régulier
    Inscrit en
    Juillet 2006
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 75
    Points : 76
    Points
    76
    Par défaut
    Citation Envoyé par la drogue c'est mal
    meme avec ctrl+F5 en debug, si il y a un crash, tu peux aller à la ligne ou cela à planter. Apres il faut aller dans le bon thread
    A tient je savais pas çà...
    Je vais essayer tout çà et peut-être découvrir le bug mystère !!!

  14. #14
    Membre régulier
    Inscrit en
    Juillet 2006
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 75
    Points : 76
    Points
    76
    Par défaut
    Citation Envoyé par la drogue c'est mal
    meme avec ctrl+F5 en debug, si il y a un crash, tu peux aller à la ligne ou cela à planter. Apres il faut aller dans le bon thread
    Bon, de retour de déplacement professionnel, je me remet dans mon problème... En fait je vois ce que tu veux dire : si tu plantes et qu'une boite de dialogue apparait tu peux cliquer sur "Debuggage" et retourner dans ton code. Le problème c'est que quand je plante rien ne se passe, mon thread s'arrete sans hurler, sans exeption, pas même une petite boite de dialogue !!! NADA !

  15. #15
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Une erreur système parfaitement silencieuse sous Windows, c'est généralement un débordement de pile.
    Si c'est silencieux SANS erreur système, c'est qu'il y a dans ton code une instruction qui ordonne au thread de se terminer, et que cette instruction est appelée à un moment où elle n'était pas censée l'être.

Discussions similaires

  1. Différence entre execute et select
    Par Papy214 dans le forum SQL
    Réponses: 4
    Dernier message: 21/05/2014, 09h35
  2. Réponses: 8
    Dernier message: 03/10/2008, 11h04
  3. différence entre executable et mode debug de visual
    Par thony76 dans le forum Visual C++
    Réponses: 7
    Dernier message: 05/09/2006, 16h00
  4. Réponses: 2
    Dernier message: 20/06/2006, 16h06
  5. Réponses: 1
    Dernier message: 14/06/2006, 14h25

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