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

Autres éditeurs Discussion :

[C++/GCC] Ne pas instrumenter les fonctions de la lib standard


Sujet :

Autres éditeurs

  1. #1
    Expert confirmé
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Points : 4 388
    Points
    4 388
    Par défaut [C++/GCC] Ne pas instrumenter les fonctions de la lib standard
    Bonjour à tous,

    J'ai trouvé sur ce lien :
    http://gcc.gnu.org/onlinedocs/gcc-4....n-Options.html

    la directive qui permet d'exclure des fichiers de l'instrumentation (-finstrument-functions) pour éviter d'avoir les fonctions de la lib standard (std::vector, std::map, std::string, std::XXX et aussi les fonctions d'allocations à la C++ etc.)
    -finstrument-functions-exclude-file-list=file,file,...
    Set the list of functions that are excluded from instrumentation (see the description of -finstrument-functions). If the file that contains a function definition matches with one of file, then that function is not instrumented. The match is done on substrings: if the file parameter is a substring of the file name, it is considered to be a match.

    For example, -finstrument-functions-exclude-file-list=/bits/stl,include/sys will exclude any inline function defined in files whose pathnames contain /bits/stl or include/sys.
    Seulement, je n'arrive pas à l'utiliser correctement, l'exemple donné ne doit pas exclure TOUS les fichiers de la lib standard C++.

    Version de GCC : 4.7.2 (MinGW)
    OS : Windows 7 - 64 bits

    Avez vous une idée ?

    Merci beaucoup

  2. #2
    Membre expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Points : 3 352
    Points
    3 352
    Par défaut
    Bonjour,

    L'instrumentation est faite au moment de la compilation. Donc, à moins d'utiliser des bibliothèques standards compilées avec cette option ou une version de profilage de ces bibliothèques, il n'y a aucune raison pour que les fonctions des bibliothèques soient instrumentées.
    Reste le cas des inline qui seront instrumentés, leur code étant dans les headers.
    Pour éviter d'instrumenter des fonctions on peut en donner une liste exhaustive au compilateur via -finstrument-functions-exclude-function-list, ou demander au compilateur de ne pas instrumenter les fonctions définies dans des fichiers dont le chemin matche au moins un des paramètres donné à -finstrument-functions-exclude-file-list. Une dernière solution consiste à utiliser l'attribut de fonction no_instrument_function pour désactiver sélectivement l'instrumentation, mais ce n'est pas utilisable dans le cadre de headers systèmes.

    S'il te reste des fonctions instrumentées et qui ne devraient pas l'être, alors ces fonctions sont définies dans un fichier dont le chemin n'est pas matché par une des pattern donnée par -finstrument-functions-exclude-file-list et il faut soit rajouter le bon chemin, soit en donner la liste à -finstrument-functions-exclude-function-list pour explicitement les exclure.

    L'option -M permet d'avoir la liste récursive des #include utilisés au format dépendances makefile. Cela peut te permettre de voir quel bout de chemin tu pourrais rajouter. On pourrait même imaginer automatiser la génération du paramètre par fichier compilé.

  3. #3
    Expert confirmé
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Points : 4 388
    Points
    4 388
    Par défaut
    Citation Envoyé par kwariz Voir le message
    Bonjour,

    L'instrumentation est faite au moment de la compilation. Donc, à moins d'utiliser des bibliothèques standards compilées avec cette option ou une version de profilage de ces bibliothèques, il n'y a aucune raison pour que les fonctions des bibliothèques soient instrumentées.
    Reste le cas des inline qui seront instrumentés, leur code étant dans les headers.
    Pour éviter d'instrumenter des fonctions on peut en donner une liste exhaustive au compilateur via -finstrument-functions-exclude-function-list, ou demander au compilateur de ne pas instrumenter les fonctions définies dans des fichiers dont le chemin matche au moins un des paramètres donné à -finstrument-functions-exclude-file-list. Une dernière solution consiste à utiliser l'attribut de fonction no_instrument_function pour désactiver sélectivement l'instrumentation, mais ce n'est pas utilisable dans le cadre de headers systèmes.

    S'il te reste des fonctions instrumentées et qui ne devraient pas l'être, alors ces fonctions sont définies dans un fichier dont le chemin n'est pas matché par une des pattern donnée par -finstrument-functions-exclude-file-list et il faut soit rajouter le bon chemin, soit en donner la liste à -finstrument-functions-exclude-function-list pour explicitement les exclure.

    L'option -M permet d'avoir la liste récursive des #include utilisés au format dépendances makefile. Cela peut te permettre de voir quel bout de chemin tu pourrais rajouter. On pourrait même imaginer automatiser la génération du paramètre par fichier compilé.
    Bonjour,

    Oui il s'agit des fonctions inline des lib system qui me posent problème. J'ai réussi à en exclure la plupart mais je n'arrive pas à me débarrasser de :
    Enter[0] -> _GLOBAL__sub_I__Z4tatav [FROM ??]
    Enter[1] -> __static_initialization_and_destruction_0 [FROM _GLOBAL__sub_I__Z4
    tatav]
    Leave[1] -> __static_initialization_and_destruction_0 [FROM _GLOBAL__sub_I__Z4
    tatav => 0.179 ms]
    Leave[0] -> _GLOBAL__sub_I__Z4tatav [FROM ?? => 113.459 ms]
    Enter[0] -> _GLOBAL__sub_I__ZN10AutreClassC2Ev [FROM ??]
    Enter[1] -> __static_initialization_and_destruction_0 [FROM _GLOBAL__sub_I__ZN
    10AutreClassC2Ev]
    Leave[1] -> __static_initialization_and_destruction_0 [FROM _GLOBAL__sub_I__ZN
    10AutreClassC2Ev => 0.003 ms]
    Leave[0] -> _GLOBAL__sub_I__ZN10AutreClassC2Ev [FROM ?? => 113.871 ms]
    Enter[0] -> _GLOBAL__sub_I___cyg_profile_func_enter [FROM ??]
    Enter[1] -> __static_initialization_and_destruction_0 [FROM _GLOBAL__sub_I___c
    yg_profile_func_enter]
    Leave[1] -> __static_initialization_and_destruction_0 [FROM _GLOBAL__sub_I___c
    yg_profile_func_enter => 0.003 ms]
    Leave[0] -> _GLOBAL__sub_I___cyg_profile_func_enter [FROM ?? => 111.407 ms]
    Enter[0] -> main [FROM ??]
    C'est juste avant de rentrer dans le "main" de mon application, j'essaye de voir dans les headers mais je ne vois pas du tout où cela se trouve

    Faudrait savoir où sont déclarés les fonctions préfixées par "_GLOBAL__sub_" ca se trouve ce ne sont même pas des fonctions

  4. #4
    Membre expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Points : 3 352
    Points
    3 352
    Par défaut
    Je suis pas un pro c++ qui lit aisément les mangled names
    Alors je suis allé faire un tour sur c++filtjs pour m'aider.

    Tes messages semblent concerner des initialisations statiques dans la fonction tata et dans AutreClass::AutreClass(). Quant aux ?? tu pourrais essayer de linker avec des stdlib compilées en mode debug pour avoir les symboles peut-être ?

  5. #5
    Expert confirmé
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Points : 4 388
    Points
    4 388
    Par défaut
    Citation Envoyé par kwariz Voir le message
    Je suis pas un pro c++ qui lit aisément les mangled names
    Alors je suis allé faire un tour sur c++filtjs pour m'aider.

    Tes messages semblent concerner des initialisations statiques dans la fonction tata et dans AutreClass::AutreClass(). Quant aux ?? tu pourrais essayer de linker avec des stdlib compilées en mode debug pour avoir les symboles peut-être ?
    Yep, ca vient bien d'initialisations statiques du programme principal. Je ne vais tout simplement pas en tenir compte

    Pas mal l'outil en ligne pour "demangler" les noms des fonctions

    Merci pour ton aide

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

Discussions similaires

  1. Mon BDE ne sait pas utiliser les fonctions utilisateurs SQL
    Par Macadoshis dans le forum Bases de données
    Réponses: 1
    Dernier message: 09/09/2009, 14h01
  2. Mon BDE ne sait pas utiliser les fonctions utilisateurs
    Par Macadoshis dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 08/09/2009, 19h05
  3. Réponses: 25
    Dernier message: 02/08/2008, 17h11
  4. Réponses: 24
    Dernier message: 30/05/2007, 18h29
  5. Gcc et les fonctions
    Par fregolo52 dans le forum Linux
    Réponses: 9
    Dernier message: 09/08/2004, 18h55

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