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 :

Plantage en débug et pas en Release (MSVC 2003)


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de Floréal
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    456
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 456
    Par défaut Plantage en débug et pas en Release (MSVC 2003)
    Bonjour,
    Je travaille à l'évolution d'un projet, et pour cela j'ai du ajouter des données membres à une classe.
    Depuis quelques temps j'observe un phénomène assez étrange.
    En effet mon application plante lorsque je l'exécute en mode Debug (Buffer overflow), et fonctionne correctement en mode Release.
    Aprèsplusieurs tests je me suis rendu compte que les plantages survenaient que lorsque j'ai ajouté une donnée membre (un objet) à une certaine classe. Pourtant le plantage survient où les classes que j'ai modifiées n'interviennet pas.
    Comme il s'agissait de buffer overflow j'ai de suite pensé à de la récursivité, mais dans le code C++ je ne vois rien. Par contre en exécutant pas à pas le morceau de code incriminé, il passe dans de l'assembleur dont je n'ai pas la maitrise, mais je peux voir qu'il boucle.
    Le plantage à lieux lors de l'appel d'une fonction (le programme tente de l'appeler semble-t'il, mais n'y rentre pas). Le buffer overflow survient dans le fichier chkstk.asm (fourni par Miscrosoft), à la ligne 91.
    Mon projet est développé sous VS2003 (Microsoft Visual C++ .NET 69526-335-0000007-1806) avec des MFC.
    Je précise aussi que je n'ai jamais fait de MFC avant, et que certaines précautions à prendre on pu m'échapper.
    Avez vous déjà été confronté à ce problème?
    Si oui, vous en êtes vous sortis, et comment?
    Je vous remercie par avance de votre aide.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 126
    Par défaut
    Bonjour,

    As-tu vérifié que les options de ton vcproj sont rigoureusement les mêmes en release et en debug.

    Sinon, je crois que j'ai déjà rencontré le problème que j'avais "résolu" (contourné) en remplaçant mes déclarations statiques de tableaux par des allocations dynamiques (en utilisant explicitement new).
    Exprimé autrement, j'avais contourné les limites de la pile par une allocation dynamique.

    En espérant que cela t'inspire,
    Cordialement,
    A.

    PS : Utilises-tu des ASSERT en debug ? Si oui, peut-être chercher dans cette direction...

  3. #3
    Membre éclairé
    Avatar de Floréal
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    456
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 456
    Par défaut
    Ce que tu me dis au sujet des tableaux va m'être utile, car en effet dans la classe que j'ai ajouté j'utilise des tableaux statiques (de int).
    Pour les options de configuration, elles ne sont pas identiques, mais comme ce n'est pas moi qui ai fondé ce projet j'hésite à y toucher, d'autant que je ne le maitrise pas dans sa globalité.
    En ce qui concerne les ASSERT(), je n'en ai pas mis dans mon code.

  4. #4
    Membre Expert
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Par défaut
    oublie les tableaux dynamiques C-like et passe aux vectors..


    Sinon pour le sujet principal : sans le code on va pas pouvoir dire grand chose.

  5. #5
    Membre Expert
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Par défaut
    J'ai l'impression que tu confonds buffer overflow (dépassement des limites d'un tableau, généralement, écriture de trop de caractères dans une chaîne de taille fixe), et stack overflow (débordement de pile, soit par allocation sur la pile d'un tableau trop grand, soit par récursivité infinie).

    Sinon, s'il s'agit bien d'un buffer overflow, il y a des chances qu'il existe en release mais ne soit pas détecté. Nettoie bien ton projet, cela dit, et si tu mélanges des libs debug/release (ça peut arriver quand on ne fait pas attention aux options du projet), il y a toutes les chances que ça vienne de là (il arrive que des programmeurs fassent des structures qui ne font pas la même taille en debug et en release).

  6. #6
    Membre éclairé
    Avatar de Floréal
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    456
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 456
    Par défaut
    En ce qui concerne les tableaux je préfère les utiliser parce que je connais déjà la taille de ces derniers, et j'ai déjà tenté d'utiliser des vecteurs avec les mfc et comment dire... ça ne voulait plus compiler.
    Et sinon pour white_tentacle: En effet c'est bien d'un stack overflow dont il s'agit, Au temps pour moi.
    Je crois que je vais tenter la solution d'agamitsudo.

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

Discussions similaires

  1. Fonctionne en Debug mais pas en Release
    Par Baud10 dans le forum MFC
    Réponses: 23
    Dernier message: 04/02/2008, 15h17
  2. Réponses: 3
    Dernier message: 16/01/2008, 10h07
  3. [Surnaturel] Une fonction qui marche en débug, pas en release
    Par 10_GOTO_10 dans le forum C++Builder
    Réponses: 6
    Dernier message: 04/07/2006, 14h22
  4. Réponses: 12
    Dernier message: 15/02/2005, 15h34
  5. regsvr32 failed en debug mais pas en release
    Par afan dans le forum DirectX
    Réponses: 1
    Dernier message: 09/06/2004, 10h32

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