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++/CLI Discussion :

[2.0] Comment tracer les fuites mémoire ?


Sujet :

C++/CLI

  1. #1
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut [2.0] Comment tracer les fuites mémoire ?
    Bonjour,

    Je réalise actuellement une application qui utilise des APIs fournies par un prestataire. Mon problème c'est que j'ai une fuite mémoire lors de l'appel à une méthode de l'API.
    Tentative de lecture ou d'écriture de mémoire protégée. Cela indique souvent qu'une autre mémoire est endommagée.
    Après avoir vu avec le support du prestataire de l'API, mon code ne semble pas être en cause. J'aurai donc voulu savoir si il y avait un moyen de tracer les fuites mémoire et si oui lequel.
    Pas de questions techniques par MP

  2. #2
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  3. #3
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Citation Envoyé par neguib
    as-tu été voir de ce côté
    De ce côté ? Il ne manquerait pas un hyperlien par hasard ?
    Pas de questions techniques par MP

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 8
    Points : 9
    Points
    9
    Par défaut
    ca dépend, si tu es du coté de linux il y a valgrind,
    et des fois je me sers du mem leak tracker de flipcode
    (que je ne trouve plus actuellement !?)
    mais que j'ai de façon bien prévoyante recopié ici
    http://marin.laetitia.free.fr/index....-30%2015:30:29

  5. #5
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Citation Envoyé par StormimOn
    De ce côté ? Il ne manquerait pas un hyperlien par hasard ?
    si excuses j'ai édité
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  6. #6
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Je vais tester les logiciels cités dans ce sujet, certains sont disponibles en version d'évaluation, on ne sait jamais.

    Je profite de ce sujet pour une autre question, liée peut être au problème de fuite mémoire mais rien n'est sûr. Dans mes APIs, la plupart des méthodes allouent et initialisent des chaînes de caractères (formatage de fichier, génération d'UID, ...). Je me retrouve souvent avec ce type de code en gros
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    char * content;
    char * error;
    int result = MaMethode(&content);
    int result = MonAutreMethode(content, &error);
    Le problème, c'est comment je libère les pointeurs (content et error dans l'exemple) une fois que je m'en suis servit et que je n'en ai donc plus besoin ? Le delete en C++/CLI appelle le finaliseur ou le destructeur il me semble, mais il ne sert pas à la libération mémoire d'un pointeur comme en C++. Donc comment dois-je m'y prendre ?

    Je ne m'en était pas préocuppé au début car la première documentation des APIs laissait entendre que des méthodes étaient fournies pour ca, mais il s'avère que la libération est à notre charge au final.
    Pas de questions techniques par MP

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 103
    Points : 1 561
    Points
    1 561
    Par défaut
    En code managé ca n'a pas rééllement d'importance, le GC fera le nécessaire, tot ou tard, en code non managé, c'est là que ca se complique, et c'est souvent la cause des mémoryleaks, c'est pourquoi un API bien écrit, ne devrait jamais alloué lui meme une chaine, mais devrais toujours utiliser un buffer, fourni par le client, comme c'est le cas avec l'api windows (faut quand meme leur rendre cet homage, la dessus sont moins cons que certains)

    Et puis en code managé, tout ce que tu alloue est systematiquement libéré à la destruction de l'appli, meme si ta rien écrit pour
    Maintenant en code non managé cette affirmation ne tiens plus la route et cela dépend de ton modele d'allocation... (savoir si ta un gestionnaire mémoire au dessus qui émule un GC ou pas, dans le cas ou t'en a pas, ba là, ya memory leaks)

    Quand à linux, les memory leaks ne peuvent persister que pendant la durée de vie de l'application. En effet, TOUT Ce qui est alloué est systematiquement supprimé après suppression de l'appli. Faut dire que le modele théorique de linux, s'y porte particulierement bien, en contrepartie, ce modele rend le partage de mémoire plus hardue que sous windows. On peut pas tout avoir et tout est question de point de vue.

    Maintenant oublie pas que la libération déterministe en code managé, n'est pas une science exacte, et oui le GC fait ce qu'il veut quand il veut. donc je doute que tu doive t'inquiter de savoir si c'est ton code qui a alloué la chaine ou l'api. Maintenant en code non managé, j'avoue que je suis perplexe de voir qu'ils alloue une chaine car faut pensé à la libérer...

  8. #8
    mat.M
    Invité(e)
    Par défaut
    Citation Envoyé par StormimOn
    Bonjour,

    Je réalise actuellement une application qui utilise des APIs fournies par un prestataire. Mon problème c'est que j'ai une fuite mémoire lors de l'appel à une méthode de l'API.
    euuh ok mais je comprends pas : l'application est-elle en code natif et ton appli en C++/CLI ?

  9. #9
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Pour du code non managé, je garderais les bonnes habitudes du C++, à savoir, ne pas utiliser des char*, mais des std::string.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  10. #10
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1
    Points : 1
    Points
    1
    Par défaut voir les objets qui ont été créés en mémoire
    Citation Envoyé par StormimOn Voir le message
    Bonjour,

    Je réalise actuellement une application qui utilise des APIs fournies par un prestataire. Mon problème c'est que j'ai une fuite mémoire lors de l'appel à une méthode de l'API.

    Après avoir vu avec le support du prestataire de l'API, mon code ne semble pas être en cause. J'aurai donc voulu savoir si il y avait un moyen de tracer les fuites mémoire et si oui lequel.
    Pour un projet personnel j'ai eu à chercher les fuites mémoires, j'ai développé un utilitaire me permettant de connaitre les nouveaux objets créés en mémoire après un appel d'une méthode.

    http://joafip.sourceforge.net/impl/m...emoryleak.html

Discussions similaires

  1. Comment tracer les courbes de BER en fonction de SNR
    Par okeremy dans le forum Signal
    Réponses: 1
    Dernier message: 06/12/2011, 14h14
  2. comment détecter les fuites mémoires
    Par cyrille37 dans le forum C++/CLI
    Réponses: 2
    Dernier message: 26/04/2008, 16h12
  3. Réponses: 0
    Dernier message: 25/02/2008, 19h00
  4. [débutant] comment éviter les fuites de mémoire ?
    Par dahtah dans le forum Général Java
    Réponses: 6
    Dernier message: 13/03/2007, 18h40
  5. Comment tracer les requêtes ?
    Par srappaille dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 26/01/2006, 19h57

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