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 :

Programme qui plante sans crier gare


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Par défaut Programme qui plante sans crier gare
    J'ai un prg qui plante 1 fois sur 100 (ou sur 1000). Pas souvent donc, mais c'est quand même trop.
    Le problème est qu'il plante sans qu'aucune exception ne soit interceptée malgré un catch(...) dans le main. Windows se débarrase du prg comme un malpropre (avec un errorlevel mais je ne sais pas lequel).

    Je soupçonne le stack corrompu par un écrasement occasionnel.
    D'autres idées ?
    Et comment y rémédier ?
    Merci

  2. #2
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    A défaut d'autres informations, je te proposerais bien de jeter le programme toi aussi, mais je crains que cela ne fasse pas ton affaire

    Plus sérieusement, ce peut être une corruption de la pile ou un quelconque signal d'erreur similaire.

    Si c'est un programme que tu t'es procuré ailleurs, fait une remontée de bug (si possible).

    Si c'est un programme à toi, essaye de vérifier correctement ton code, voire, d'essayer de cerner plus précisément le problème, mais, s'il ne plante que de manière aléatoire (toutes les X ou Y exécutions), il faudrait déjà essayer de comprendre dans quelles circonstance ce plantage survient, histoire de pouvoir te mettre dans une situation où il surviendra systématiquement et avoir une chance d'en trouver la raison
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  3. #3
    Membre Expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Par défaut
    Tu peux utiliser un debugger type visual studio non? Que te dis ton debugger exactement quand ça plante?
    Ou alors ça se passe avant même l'execution du main() ? Si c'est le cas, c'est très certainement que tu as quelque chose de trop gros dans ta stack, peut être un tableau énorme ou quelque chose dans ce gout là?

  4. #4
    Membre éclairé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Par défaut
    Je vais essayer d'être plus précis: ça ne plante qu'en release et très rarement. J'ai jamais réussi à le faire planter en debug.

    Le workaround pour l'instant est simplement de le relancer quand il s'est planté. Comme je le disais il ne plante que très rarement.
    Ainsi, si je lance le programme des dizaines de fois à la suite les unes des autres, avec exactement le même contexte (données, paramètres, etc), il ne plantera qu'une fois de temps en temps.
    Curieux, et très emm...ant

    Ceci dit, je sais dans quelle fonction il plante. Il y a la fonction main() (c'est un prg en mode console) puis une fonction Run() appellée par main(). Dans cette fonction Run() j'exécute un ensemble de tâches séquentiellement. C'est lors de la fin d'une de ces tâches quelconques que le programme s'arrête. C'est donc toujours dans Run() que ça plante.
    A vos idées, merci.

  5. #5
    Membre Expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Par défaut
    Je vais essayer d'être plus précis: ça ne plante qu'en release et très rarement. J'ai jamais réussi à le faire planter en debug.
    Ce cas est commun et souvent c'est qu'une de tes variable membre n'a pas d'initialization définie dans le constructeur de classe.
    Je te conseil de faire le tour de tes classes et de vérifier voir si il manque pas une initialization quelque part.


    Sinon, dans Run j'imagine que les taches sont dynamiquement gérées et donc ça n'a rien de déterministe? Il se peut que ton problème arrive a un moment ou la liste des taches est changée non? Tu devrais ajouter un log pour vérifier ça, en affichant quand tu la change et quels taches (nommées du coup) sont ajoutées/enlevées.

  6. #6
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 122
    Billets dans le blog
    148
    Par défaut
    Citation Envoyé par Klaim Voir le message
    Sinon, dans Run j'imagine que les taches sont dynamiquement gérées et donc ça n'a rien de déterministe? Il se peut que ton problème arrive a un moment ou la liste des taches est changée non? Tu devrais ajouter un log pour vérifier ça, en affichant quand tu la change et quels taches (nommées du coup) sont ajoutées/enlevées.
    J'ai pensé, moi aussi en lisant cette histoire de Run(), que ça pouvait être un problème de priorité ( race bug ? ). Soit une fonction qui doit attendre une autre mais qui est executé avant la fin de celle ci. ( Mais je croyais que ça arrivait que dans les programmes threader )
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  7. #7
    Membre Expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Par défaut
    je ne connais pas tres bien le process de compîl sous studio,

    il n'y pas possibilité d'activer les Warning de compil (ça ne fait pas tout) d'insérer des traces, d'utiliser des outils de vérification type valgrind/ ...


    autrement une autre piste peu consister à essayer d'identifier le use-case qui fait planter en sauvegardant des contextes de ton appli (états des variables, données d'entrées, ...) à des points stratégiques et t'arranger pour pouvoir les rejouer quand tu identifie un jeu de données qui fait planter.

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

Discussions similaires

  1. Programme qui plante : seg fault
    Par Premium dans le forum C
    Réponses: 10
    Dernier message: 01/12/2006, 15h12
  2. programme qui plante. chercher/remplacer dans des fichiers.
    Par [Hugo] dans le forum Général Python
    Réponses: 2
    Dernier message: 31/10/2006, 17h10
  3. build.xml qui plante sans raison
    Par marc olivier dans le forum EDI et Outils pour Java
    Réponses: 9
    Dernier message: 17/05/2006, 18h48
  4. Faire un programme qui plante et noter le plantage
    Par cedricgirard dans le forum Langage
    Réponses: 9
    Dernier message: 22/03/2006, 16h36
  5. Programme qui plante
    Par harris_macken dans le forum C++
    Réponses: 1
    Dernier message: 22/05/2005, 23h50

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