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 :

Analyse de code C++


Sujet :

C++

  1. #1
    Membre confirm�
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    109
    D�tails du profil
    Informations personnelles :
    �ge : 35
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 109
    Par d�faut Analyse de code C++
    Bonjoru tout le monde,

    Je suis actuellement sur un projet d'analyse de code C++.
    En gros, il me faut cr�er une appli en C++ qui recherche l'ensemble des requetes SQL qui peuvent �tre cr�er dynamiquement dans une autre appli C++.

    Dans ce contexte j'aimerais trouver une m�thode, un outils ou m�me une id�e pour me permettre de rechercher l'ensemble des m�thodes qui font appel � une autre m�thode, exemple:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    void Toto::Select(char* mesTables, char* mesWhere)
    {
      int     nStatus;                   // statut retour oracle
      char    maRequete[LGMAX_REQUETE];   // requete a executer
      int nbLigne;
    
      strcpy(maRequete, "SELECT nom_des_champs a ramener FROM ");
      strcat(maRequete, mesTables);
      strcat(maRequete, " WHERE ");
      strcat(maRequete, mesWhere);
     
      nStatus = Open(maRequete);
      oErreur.Verifier(__FILE, "SelectRowid", OPE, maRequete, "res", 1, nStatus);
      nStatus = Nombre(nLigne);
      oErreur.Verifier(__FILE, "SelectNombre", SEL, maRequete, "res", 1, nStatus);
      nStatus = Close();
      m_nNbLigne = 0;
     
    }
    Dans cette m�thode, on voit qu'il y a un appel � Open, j'aimerais donc qu'en passant en param�tre ( � une m�thode ou un outils ) Open, on me ressorte Toto::Select.

    Merci de votre aide je suis assez emb�ter l�.

  2. #2
    Membre �clair� Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    D�tails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Par d�faut
    Salut, j'ai plusieurs questions car pour moi y apleins de choses confuses.

    1. Quand tu parles d'un projet, tu parles d'un devoir � rendre?
    2. Quand tu parles d'une autre application, tu parles d'une lib externe? Si oui, tu dois en utiliser une en particulier (si il s'agit d'un devoir) ou tu cherches des id�es? J'ai pas compris si tu en cherchais une ou si tu cherchais comment l'utiliser.
    3. Quand tu fais "open(requete)", tu voudrais qu'il se passe quoi au juste?
    4. Qu'est ce que tu veux dire quand tu �cris "on me ressorte Toto::Select."?

    Petite remarque au passage, tu fais du C++, oublie les char*, strcpy, strcat et compagnie, utilises des std::string .

  3. #3
    Membre confirm�
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    109
    D�tails du profil
    Informations personnelles :
    �ge : 35
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 109
    Par d�faut
    Ok alors je vais pr�ciser quelques trucs ^^ :

    1. Quand je dis projet c'est un projet d'entreprise, je ne suis plus �tudiant.
    2. On me demande de cr�er une appli compl�te (un projet) qui me permette d'analyser du code d'une autre application C/C++ (que je ne connais pas du tout).
    3. Je veux rien c'est un exemple de code que je dois analyser.
    4. Je cherche un outils, une m�thode, un trucs... qui me permette de ressortir l'ensemble des m�thodes qui font appel � une autre dont j'aurai pass� le nom en param�tre.

    Donc si j'utilise un outils et que je veux obtenir l'ensemble des m�thodes qui utilise la m�thode Open, j'obtiendrais Toto::Select.

    Je ne mis connait pas du tout en C/C++ mais j'apprends petit � petit.
    Merci de ton aide

  4. #4
    Membre Expert
    Avatar de imperio
    Homme Profil pro
    �tudiant
    Inscrit en
    Mai 2010
    Messages
    872
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 872
    Par d�faut
    La fonction "recherche" de quasiment tous les �diteurs de texte ne te convient pas ? Avec la quasi-totalit� des IDE actuels tu pourrais t'en sortir assez facilement.

  5. #5
    Expert �minent

    Femme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par d�faut
    Linux possede ltrace (et son frere strace) pour tracer les appels a une lib.

    il doit y avoir un �quivalent sous windows, mais je n'ai pas cherch�

  6. #6
    Membre confirm�
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    109
    D�tails du profil
    Informations personnelles :
    �ge : 35
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 109
    Par d�faut
    Imperio, je cherche un outils utilisable dans une appli pour pouvoir traiter le r�sultat directement.

    leternel, je vais regarder ce que je trouve � ce propos, il faudrai pouvoir �crire le r�sultat dans un fichier pour pouvoir l'analyser ensuite.

  7. #7
    Membre �clair� Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    D�tails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Par d�faut
    Ah OK je comprends mieux � pr�sent, tu cherches un profiler.
    Regarde une fois GNU gprof:

    http://sourceware.org/binutils/docs-...rof/index.html

    C'est un profiler de code qui te pemet par exemple de savoir combien de fois une fonction est appel�e, combien de temps elle a consomm�, ... .
    Je crois que tu peux faire un graphe des appels de fonctions, � voir, faudra �tudier la doc.

  8. #8
    Membre confirm�
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    109
    D�tails du profil
    Informations personnelles :
    �ge : 35
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 109
    Par d�faut
    Alors un autre trucs que j'ai homis de pr�cis� :

    Je travaille sous Windows.
    Je cherche � r�cup�rer ces informations sans lancer l'appli dont le code est analys�. Il me semble que ce que vous me propos� l� permet de travailler pendant l'ex�cution du code (si je me trompe il faut me le dire).

    Merci pour vos r�ponses.

  9. #9
    Expert �minent

    Femme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par d�faut
    sans lancer l'application?

    alors oriente-toi soit vers un bon �cran et une paire d'yeux neufs, soit vers un analyseur syntaxique customis�.

    Puisque tu as les sources de l'application, wingrep va te servir.
    ltrace permet d'espionner une application pendant son ex�cution.

  10. #10
    R�dacteur

    Avatar de Matthieu Brucher
    Profil pro
    D�veloppeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    D�tails du profil
    Informations personnelles :
    �ge : 43
    Localisation : France, Pyr�n�es Atlantiques (Aquitaine)

    Informations professionnelles :
    Activit� : D�veloppeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par d�faut
    Citation Envoy� par roulian46 Voir le message
    Ok alors je vais pr�ciser quelques trucs ^^ :

    1. Quand je dis projet c'est un projet d'entreprise, je ne suis plus �tudiant.
    2. On me demande de cr�er une appli compl�te (un projet) qui me permette d'analyser du code d'une autre application C/C++ (que je ne connais pas du tout).
    3. Je veux rien c'est un exemple de code que je dois analyser.
    4. Je cherche un outils, une m�thode, un trucs... qui me permette de ressortir l'ensemble des m�thodes qui font appel � une autre dont j'aurai pass� le nom en param�tre.

    Donc si j'utilise un outils et que je veux obtenir l'ensemble des m�thodes qui utilise la m�thode Open, j'obtiendrais Toto::Select.

    Je ne mis connait pas du tout en C/C++ mais j'apprends petit � petit.
    Merci de ton aide
    Ca me fait penser a la fonction recherche de Visual Assist, un plugin de Visual Studio. Tu selectionnes une methode et tu fais find references et il te sort tous les appels a cette methode partout dans ton code.
    Il y a une version demo pour tester.

  11. #11
    Membre confirm�
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    109
    D�tails du profil
    Informations personnelles :
    �ge : 35
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 109
    Par d�faut
    Peut-on lancer cette fonction en mode ligne de commande?

  12. #12
    R�dacteur

    Avatar de Matthieu Brucher
    Profil pro
    D�veloppeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    D�tails du profil
    Informations personnelles :
    �ge : 43
    Localisation : France, Pyr�n�es Atlantiques (Aquitaine)

    Informations professionnelles :
    Activit� : D�veloppeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par d�faut
    Non, il faut avoir dans une base de donnees la description du programme, ses options de compilation... Tout ca ne peut etre fait que dans un IDE de maniere propre.
    Tu es sous Windows, donc tu dois avoir un projet Visual Studio ? Tu installes le plugin et tu testes sur le projet

    Ou alors tu te fracasse un outil qui analyse ton code, ecrit toutes les references dans une base de donnees... ca devrait de prendre pas plus de 3 ou 4 ans de faire un outil sur mesure...

  13. #13
    Membre confirm�
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    109
    D�tails du profil
    Informations personnelles :
    �ge : 35
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 109
    Par d�faut
    Le probl�me c'est que r�cup�rer les diff�rents appels de m�thode est simplement une partie de mon appli, pas le souhait final de mon client sinon �a serait trop facile.
    Il me faut r�cup�rer les appels de m�thode pour ensuite analyser ces m�thodes et ainsi de suite jusqu'� obtenir une requ�te SQL compl�te.

  14. #14
    R�dacteur

    Avatar de Matthieu Brucher
    Profil pro
    D�veloppeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    D�tails du profil
    Informations personnelles :
    �ge : 43
    Localisation : France, Pyr�n�es Atlantiques (Aquitaine)

    Informations professionnelles :
    Activit� : D�veloppeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par d�faut
    Alors bon courage, c'est juste un chantier titanesque qui t'attend. On pourrait imaginer passer par des grep, mais tu auras beaucoup de faux positifs.
    Peut-etre que libclang pourra t'aider a verifier si un appel est bien sur un objet du type que tu veux ?

  15. #15
    Membre confirm�
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    109
    D�tails du profil
    Informations personnelles :
    �ge : 35
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 109
    Par d�faut
    Bon si j'ai bien comrpsi je suis dnas la m...e.
    J'ai trouv� CSCope qui � l'air de faire presque ce que je veux sauf qu'il v�rifie pas de quelle classe vient la m�thode.
    C�Dire que si plusieurs classes on la m�me m�thode, il me les remonte toutes les 2...

  16. #16
    R�dacteur

    Avatar de Matthieu Brucher
    Profil pro
    D�veloppeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    D�tails du profil
    Informations personnelles :
    �ge : 43
    Localisation : France, Pyr�n�es Atlantiques (Aquitaine)

    Informations professionnelles :
    Activit� : D�veloppeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par d�faut
    Citation Envoy� par roulian46 Voir le message
    Bon si j'ai bien comrpsi je suis dnas la m...e.
    J'ai trouv� CSCope qui � l'air de faire presque ce que je veux sauf qu'il v�rifie pas de quelle classe vient la m�thode.
    C�Dire que si plusieurs classes on la m�me m�thode, il me les remonte toutes les 2...
    Normal (grosso modo, c'est un grep), il faut une analyse complete du code pour voir d'ou l'objet vient. C'est front-end de compilateur qu'il faut...

  17. #17
    Membre �clair� Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    D�tails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Par d�faut
    J'ai du mal � suivre, tu veux pas faire un profiling du code mais juste parser des fichiers textes (tes fichiers sources)?

    Si c'est le cas, j'irai dans le sens de leternel en disant qu'il va falloir te mettre � lex & yacc.

  18. #18
    Membre Expert

    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 49
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - Op�rateur de t�l�communications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Par d�faut
    Citation Envoy� par Matthieu Brucher Voir le message
    Non, il faut avoir dans une base de donnees la description du programme, ses options de compilation... Tout ca ne peut etre fait que dans un IDE de maniere propre.
    Tu es sous Windows, donc tu dois avoir un projet Visual Studio ? Tu installes le plugin et tu testes sur le projet

    Ou alors tu te fracasse un outil qui analyse ton code, ecrit toutes les references dans une base de donnees... ca devrait de prendre pas plus de 3 ou 4 ans de faire un outil sur mesure...
    Il y a peut-�tre la possibilit� d'utiliser LLVM pour construire l'AST du programme, et ensuite r�cup�rer les appels qui vont bien. L'interface de LLVM n'est pas si compliqu�e que �a, et son utilisation devrait permettre un certain gain de productivit�.

    Apr�s, je ne l'ai pas encore utilis� donc je ne vais pas m'avancer sur la difficult� du travail. Ceci dit, les tutoriaux trouv�s ici et l� sur le web me semblent abordables.
    [FAQ des forums][FAQ D�veloppement 2D, 3D et Jeux][Si vous ne savez pas ou vous en �tes...]
    Essayez d'�crire clairement (c'est � dire avec des mots fran�ais complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Caf�. C'est d�pass� tout �a.
    Et si vous �tes sages, vous aurez peut �tre vous aussi la chance de passer � la t�l�. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  19. #19
    R�dacteur

    Avatar de Matthieu Brucher
    Profil pro
    D�veloppeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    D�tails du profil
    Informations personnelles :
    �ge : 43
    Localisation : France, Pyr�n�es Atlantiques (Aquitaine)

    Informations professionnelles :
    Activit� : D�veloppeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par d�faut
    Citation Envoy� par Emmanuel Deloget Voir le message
    Il y a peut-�tre la possibilit� d'utiliser LLVM pour construire l'AST du programme, et ensuite r�cup�rer les appels qui vont bien. L'interface de LLVM n'est pas si compliqu�e que �a, et son utilisation devrait permettre un certain gain de productivit�.
    Oui, tu peux tenter ca avec libclang (j'ai par exemple un petit script qui fait de la conversion vers du xml de prototypes, clamg2xml sur github) qui lui expose le parseur C/C++. Normalement, tu peux parcourir l'AST (il n'existe plus dans LLVM), chercher si la methode associee est toto et remonter au type appelant, verifier si c'est bien un tata ou un heritage de tata, recuperer les arguments et faire ca.
    Ca demande pas mal de travail, mieux vaut le faire en Python, je pense, et tu reduis la duree du developpement, clairement.

  20. #20
    Inactif  

    Homme Profil pro
    Ing�nieur test de performance
    Inscrit en
    D�cembre 2003
    Messages
    1 986
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 51
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : Ing�nieur test de performance
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : D�cembre 2003
    Messages : 1 986
    Par d�faut
    Bonjour.

    Le m�tier de d�veloppeur C++ ne consiste pas seulement � utiliser/adapter des programmes tout fait. Certes, ce n'est pas toujours judicieux de r�inventer la roue, mais quand la roue est carr�e, il faut mettre les mains dans le cambouis. Oui, un d�veloppeur, �a �crit aussi du code � partir de rien.

    Il est vrai que parser un ficher C++ n'est pas chose ais�e, mais on ne te demande pas non plus d'�crire un compilateur (d'ailleurs tu peux aller voir les source de gcc, il est en C++ maintenant : GGC).

    Mon conseil, surtout si tu apprends le C++, �cris du code par toi-m�me. Un parseur de fichier, ce n'est pas la chose la plus int�ressante en programmation. Mais ce n'est pas insurmontable non plus. Cela ne devrait pas rebuter un d�veloppeur C++, m�me d�butant.

    Citation Envoy� par roulian46 Voir le message
    Le probl�me c'est que r�cup�rer les diff�rents appels de m�thode est simplement une partie de mon appli, pas le souhait final de mon client sinon �a serait trop facile.
    Il me faut r�cup�rer les appels de m�thode pour ensuite analyser ces m�thodes et ainsi de suite jusqu'� obtenir une requ�te SQL compl�te.
    Et puis le client il demandera certainement des choses suppl�mentaires encore. Si un outil r�pond exactement au besoin pr�sent et futur de ce client (et en plus open source), tu es le plus chanceux de la terre...

Discussions similaires

  1. Outil d'analyse de code
    Par Bloon dans le forum Outils
    R�ponses: 8
    Dernier message: 07/08/2007, 09h04
  2. Analyse de code
    Par ecocentric dans le forum Autres �diteurs
    R�ponses: 1
    Dernier message: 11/02/2005, 01h09
  3. [WSAD 5 ] - Analyse de code
    Par nicoswiss dans le forum Eclipse Java
    R�ponses: 8
    Dernier message: 13/08/2004, 10h21
  4. [ Code ] Analyse de code - Attribut Inutile
    Par geegee dans le forum Eclipse Java
    R�ponses: 2
    Dernier message: 19/05/2004, 09h07
  5. Cherche lien info... sur l'analyse du code
    Par Alec6 dans le forum Qualim�trie
    R�ponses: 3
    Dernier message: 03/03/2004, 14h44

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