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 :

création d'outils de débogage de mémoire


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 44
    Par défaut création d'outils de débogage de mémoire
    Bonjour,
    Je voudrais créer mes propres outils pour faire du débogage de mémoire de mes programmes :
    détection de leaks, débordement de tampon, utilisation de mémoire alors qu'elle a été désallouée, etc...

    Cela se fait facilement pour l'allocation dynamique en surchargeant les opérateurs new et delete.

    Mais comment faut-il faire dans les cas de l'allocation automatique ou statique?

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Pour l'automatique (et sans doute le statique aussi), à part wrapper les variables en question dans des objets perso, je ne vois pas trop comment faire sans modifier le compilo...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre chevronné
    Inscrit en
    Juillet 2012
    Messages
    231
    Détails du profil
    Informations forums :
    Inscription : Juillet 2012
    Messages : 231
    Par défaut
    Citation Envoyé par dvince38 Voir le message
    Bonjour,
    Je voudrais créer mes propres outils pour faire du débogage de mémoire de mes programmes :
    détection de leaks, débordement de tampon, utilisation de mémoire alors qu'elle a été désallouée, etc...

    Cela se fait facilement pour l'allocation dynamique en surchargeant les opérateurs new et delete.

    Mais comment faut-il faire dans les cas de l'allocation automatique ou statique?
    Je vois deux solutions :
    1) passer par de l’instrumentation binaire
    2) instrumenter le code à la compilation

    Pour le 1), c’est ce que fait memcheck de Valgrind (Valgrind étant lui-même un framework d’instrumentation binaire). D’ailleurs je te conseille fortement de te baser sur Valgrind (sauf si tu veux vraiment perdre ton temps à réimplémenter un bout de la libc, un désassembleur, un compilateur JIT, …).
    Même en te basant sur Valgrind, le genre de truc que tu veux faire implique l’implémentation d’une shadow memory et rien que ça ce n’est pas si trivial que ça.
    Et quand bien même tu vas faire ça correctement, ton programme va tourner beaucoup plus lentement (~20x plus lentement, si tu codes vraiment bien le bousin).
    Pourquoi ne pas utiliser memcheck au lieu de réinventer la roue ?

    Pour la solution 2, qui est plus performante que la solution 1 (ton programme ne tournera que ~2x plus lentement, si c’est bien fait), il vaut mieux passer par LLVM et rajouter une étape à la compilation qui va instrumenter le code. Là encore, tu risques de t’amuser un petit moment.
    En plus, ça a déja été fait (AddressSanitizer) et c’est maintenant intégré dans GCC (depuis la 4.8) et clang (depuis la 3.3 au moins). Pourquoi ne pas l’utiliser ?

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 44
    Par défaut
    J'utilise actuellement Drmemory, mais celui-ci ne détecte pas tout les débordements de tampon, donc je voulais faire des outils complémentaires.
    J'avais pas vu que AddressSanitizer était maintenant intégré dans gcc 4.8.
    Si j'arrive à le faire marcher, ça serait l'idéal.
    Je suis sous mingw et le linker me met l'erreur "ld.exe: cannot find -lasan"

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 15/07/2008, 20h34
  2. [VB6] Outil pour surveiller la mémoire utilisée
    Par heffer69 dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 10/06/2008, 14h19
  3. Réponses: 19
    Dernier message: 20/02/2008, 12h03
  4. Réponses: 22
    Dernier message: 03/08/2005, 00h28

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