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 :

Verification de mémoire


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Par défaut Verification de mémoire
    Bonjour,

    J'ai un code assez lourd, même tres lourd ecrit en C++ + Qt4 qui fonctionne bien sous windows et linux mais qui persente des plantages intenpestifs que je n'arrive pas à isoler.
    J'ai essayer de le compiler avec l'option electric-fence mais à l'execution j'ai sytématiquement des erreurs du type :

    ElectricFence Exiting: mprotect() failed: Cannot allocate memory

    J'ai alors essayé Valgrind, mais la mon applie s'affiche et se plante dé quelle s'affiche. J'ai bien avancé en reduisant certaine resource de mon appli mais que je lance une tache un peu complexe, valgrind se plante. Enfin, ca m'a l'air trés instable dé que l'appli est un peu grosse

    Je ne sais plus quel outil essayer sous linux alors je me suis tourné sous windows, mais là avant j'utilisais CodeCard de builder qui était génial, mais depuis que je suis passé à gcc, je ne sais pas trop quoi utiliser pour tester mes appli

    Merci de vos suggestions

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 118
    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 118
    Billets dans le blog
    148
    Par défaut
    Sous linux , pour du débuggage tu as gdb et son interface graphique ddd.
    Par contre rajoute l'option -ggdb3 ( ou -g seulement ) lorsque tu compile.

    Sous windows, code::blocks à un debuggeur ( et il utilise le portage de gcc ).
    Visual Studio aussi à un très bon outils intégré à l'IDE , mais il faut reussir à relancer le projet avec celui ci.

    Bonne chance pour ton debuggage ... c'est ton programme ? où tu choppe un programme avec plein de bug ?
    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.

  3. #3
    Membre éprouvé Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Par défaut
    Je n'ai pas été assez clair!
    J'utilise codeblock, j'ai donc bien un debugger, mais ce n'est pas suffisant dans certain cas trop complexe. Là j'ai bseoin d'un checker de memoire. Un outil permettant de te dire par example que tu accedes à un indice de tableau superieur à celui déclarée par malloc ou new ou même [].

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    349
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2005
    Messages : 349
    Par défaut
    En principe un debugger suffit pour ça. Quand tu as un accès en dehors des limites d'un tableau, ton programme plante et ton debugger te montre la ligne où ça a planté.

  5. #5
    Membre émérite
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Par défaut
    Citation Envoyé par Cheps Voir le message
    En principe un debugger suffit pour ça. Quand tu as un accès en dehors des limites d'un tableau, ton programme plante et ton debugger te montre la ligne où ça a planté.
    Et du coup tu as juste à remonter la pile des appels pour trouver ce qui pose problème dans ton code (parce qu'on tombe souvent dans du code machine ou CRT ou autre ...).
    Mais effectivement, dans ce cas précis, le débuggeur suffit.

    Pour les new et des éventuelles fuites mémoire (qui peuvent être source de bug filous) je ne sais pas si Qt a un truc genre DEBUG_NEW à la Visual qui te donne la ligne d'allocation en cas de fuite. Toujours en debug.

    En bref, je ne sais pas si un tel outil (i.e. capable de recoller les morceaux) existe. Il aurait fallu être clean dès le début, mais d'une part c'est pas toujours facile, et d'autre part on n'y peut rien quand on récupère du code.

    En derniers recours, tu peux toujours passer un outil d'analyse statique de code du type C++Test ou un équivalent gratuit, qui te dira les variables non initialisées, les variables non utilisées, ... bref ça peut pas faire de mal. Mais ça ne fera pas de miracles non plus.

    Bon courage

  6. #6
    Membre éprouvé Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Par défaut
    Les libraries ou outils tels que memprof, valgrind, electic fence, codegarde(borland)... et j'en oublie, n'ont pas été dévelopés pour rien vous savez!

    En particulier sous windows, ce n'est pas parce que l'on fait un accé memoire non autorisé que l'on va planter le code, et souvent ca plante mais pas du tout à l'endroit attendu (parfois l'erreur est tellement indirect qu'il est impossible de mettre la main dessus.)
    Quand je developais sous builder de borlandc cette outil m'a fait gagner un temps précieux et je ne vous dis pas le nombre de collégues qui m'ont amener leurs codes pour que je mette la main sur le bug qu'il cherchait depuis des jours sans succé. Et avec ce type d'outil en 2 secondes c'est réglé.

Discussions similaires

  1. fichier mappé en mémoire
    Par WinBernardo dans le forum Delphi
    Réponses: 7
    Dernier message: 01/12/2006, 09h38
  2. Déterminer l'adresse d'une application en mémoire
    Par Gib dans le forum x86 32-bits / 64-bits
    Réponses: 9
    Dernier message: 11/06/2002, 14h27
  3. Vitesse de la mémoire vidéo
    Par Anonymous dans le forum x86 16-bits
    Réponses: 3
    Dernier message: 06/06/2002, 20h20
  4. verification de doublons dans un tableau
    Par bohemianvirtual dans le forum C
    Réponses: 11
    Dernier message: 25/05/2002, 12h21
  5. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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