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

Outils Delphi Discussion :

Outil d'analyse de code


Sujet :

Outils Delphi

  1. #1
    Membre expérimenté
    Avatar de Bloon
    Homme Profil pro
    Consultant Freelance
    Inscrit en
    Avril 2002
    Messages
    467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant Freelance
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2002
    Messages : 467
    Points : 1 339
    Points
    1 339
    Par défaut Outil d'analyse de code
    Existe-t-il à votre connaissance un outil qui analyse le code d'un projet et donne, par exemple, les objets créés et non détruits.

    Je sais bien que dans certains cas, les objets sont créés et détruits de façon "transparente" (par exemple les composants sont généralement détruits par leur owner, les objets placés dans les TObjectList sont détruits par la liste si ownsobjects est à true, etc...).

    Ce genre d'outil magique est peut-être utopique mais je pense qu'en réfléchissant sérieusement au problème on doit arriver à un résultat. Donc si ça a déjà été fait, merci de me le signaler :-)

    A+

    Bloon

  2. #2
    Membre du Club
    Inscrit en
    Août 2002
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 66
    Points : 63
    Points
    63
    Par défaut
    Salut,

    Il existe un outil, mais il analyse l'executable.
    Il suveille que la mémoire allouée est restituée etc...
    Du fait que celui-ci ce sert des information de déboguage de l'éxécutable il pointe dans Delphi la ligne ou il y a possibilité d'erreur.

    Ce reverviens presque au même.

    Cet outil s'appel Memorysleuth.
    Effectue quelques recherche sur le net je ne connais plus le fournisseur.

    Bon dev @+

  3. #3
    Membre expérimenté
    Avatar de Bloon
    Homme Profil pro
    Consultant Freelance
    Inscrit en
    Avril 2002
    Messages
    467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant Freelance
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2002
    Messages : 467
    Points : 1 339
    Points
    1 339
    Par défaut
    Effectivement, c'est mieux d'espionner l'exécution du programme, ça contourne le problème des objets non détruits explicitement, des méthodes virtuelles, etc...

    Sauf que ça suppose aussi que lorsqu'on teste le programme, on fasse toutes les actions possibles.

    J'utilise déjà MemProof mais il n'indique pas de façon claire l'endroit qui a provoqué l'erreur. Rien que l'execution d'un programme ne comprenant qu'une fenêtre vide laisse 8 pointeurs non libérés et 1 alloc de Virtual Memory non libérée.

    Sinon je suppose que tu parles de ce programme :

    http://www.turbopower.com/products/sleuth/

    Bloon

  4. #4
    Invité
    Invité(e)
    Par défaut
    Salut,

    Parallélement aux outils précités, tu peux utiliser une méthode très simple et qui donne une première approche des créations / suppressions effectuées par le programme.

    Chaque descendant de TObject comporte une méthode AfterConstruction et une méthode BeforeDestruction que tu peux surcharger avec un Override.

    Dans AfterConstruction tu peux :

    - afficher un message à l'écran indiquant la création de la classe ClassName
    - et/ou incrémenter un compteur interne à l'unité comptabilisant le nombre d'objets créés / supprimés

    Dans BeforeDestruction tu peux :

    - afficher le même type de message à l'écran, précisant la classe de l'objet détruit
    - décrémenter le compteur précédent, en vérificant qu'il est bien supérieur à 0 !!!

    Dans la partie Initialization de ton unité, tu initialises le compteur interne à 0. Dans la partie Finalization, tu vérifies qu'il est bien revenu à 0. Dans le cas contraire, cela signifie qu'un ou plusieurs objets de la classe décrite dans l'unité n'ont pas été détruits.

    On peut aller un peu plus loin dans ce type de trace en intégrant dans l'unité un objet TStringList, dans lequel tu stockes au fur et à mesure les messages de création / destruction d'objets. In fine, tu sauves tout ceci automatiquement sur disque et tu peux ainsi réanaliser tous les processus de création / suppression, et trouver quels sont les coupables...

    Ce n'est pas la seule méthode de tracé, mais elle a le mérite d'être très simple à implémenter.

    A+

    Didier

  5. #5
    Membre expérimenté
    Avatar de Bloon
    Homme Profil pro
    Consultant Freelance
    Inscrit en
    Avril 2002
    Messages
    467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant Freelance
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2002
    Messages : 467
    Points : 1 339
    Points
    1 339
    Par défaut
    Ca me plait assez comme solution. De plus c'est facile à désactiver si on encadre tout ça dans des directives de compilation.

    a+

    Bloon

  6. #6
    dsy
    dsy est déconnecté
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 105
    Points : 142
    Points
    142
    Par défaut
    Salut,

    un outil d'analyse de code delphi tres complet : http://www.peganza.com/

  7. #7
    Membre confirmé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2002
    Messages : 223
    Points : 461
    Points
    461
    Par défaut
    En outils payant il existe AQTime de Automated QA. Outils très complet pour tests, performances, leak, compatibilité, etc ...

    Sinon, tu as aussi des metrics et une vérification des bonnes pratiques de codage avec BDS 2006. Je ne sais pas si cela a été reconduit avec Delphi 2007.

  8. #8
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par trident_job
    Sinon, tu as aussi des metrics
    C'est sous Togheter et c'est plus orienté qualité du code source, non ?

  9. #9
    Membre confirmé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2002
    Messages : 223
    Points : 461
    Points
    461
    Par défaut
    Oui, c'est effectivement Togheter (intégré dans mon BDS2006).

    c'est plus orienté qualité du code source
    Code (warnings) et architecture (metrics) !

Discussions similaires

  1. Outils d'Analyse de code
    Par Smyten dans le forum Choisir un environnement de développement
    Réponses: 0
    Dernier message: 15/05/2014, 19h21
  2. Réponses: 22
    Dernier message: 29/05/2011, 21h56
  3. outils pour analyser le code ?
    Par sofiane80 dans le forum Analyse de code
    Réponses: 6
    Dernier message: 07/11/2009, 14h24
  4. Critères d'évaluation d'outils d'analyse de code Java
    Par Matt59310 dans le forum Qualimétrie
    Réponses: 5
    Dernier message: 19/10/2009, 16h42
  5. Outils d'analyse statique de code assembleur ?
    Par atomic dans le forum Assembleur
    Réponses: 4
    Dernier message: 11/06/2004, 12h42

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