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

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre exp�riment�
    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 : 47
    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
    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.

  2. #2
    Expert confirm�
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    D�tails du profil
    Informations personnelles :
    �ge : 65
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627

  3. #3
    Membre exp�riment�
    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 : 47
    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
    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 ?

  4. #4
    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
    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 confirm�
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    D�tails du profil
    Informations personnelles :
    �ge : 65
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Par d�faut
    Citation Envoy� par StormimOn
    De ce c�t� ? Il ne manquerait pas un hyperlien par hasard ?
    si excuses j'ai �dit�

  6. #6
    Membre exp�riment�
    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 : 47
    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
    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.

  7. #7
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 103
    D�tails du profil
    Informations personnelles :
    �ge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 103
    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 : 51
    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
    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
    Invit� de passage
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 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, 13h14
  2. comment d�tecter les fuites m�moires
    Par cyrille37 dans le forum C++/CLI
    R�ponses: 2
    Dernier message: 26/04/2008, 15h12
  3. R�ponses: 0
    Dernier message: 25/02/2008, 18h00
  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, 17h40
  5. Comment tracer les requ�tes ?
    Par srappaille dans le forum MS SQL Server
    R�ponses: 1
    Dernier message: 26/01/2006, 18h57

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