Problèmes d’échantillonnage temporel avec gprof

Je tente de profiler du code c ++, compilé avec g ++, y compris l’option -pg, en utilisant gprof. Cependant, malgré le fait que le programme prenne 10-15 minutes pour fonctionner sur mon ordinateur (avec le processeur maxi), les colonnes% time, cumulative seconds et self seconds de la table produite par gprof sont entièrement à zéro! La colonne des appels contient des données correctes, par exemple plus de 150 000 appels à une fonction de base. Voici un échantillon des données collectées:

% cumulative self self total time seconds seconds calls Ts/call Ts/call name 0.00 0.00 0.00 156012 0.00 0.00 perm::operator[](int) const 0.00 0.00 0.00 153476 0.00 0.00 perm::perm(void) 

Le programme n’utilise pas de chaînes et le seul #include est iostream (utilisé uniquement pour la sortie de la réponse finale) donc il ne peut pas être lent à cause des recherches de chaînes et des fonctions externes lentes similaires suggérées dans cette question: accumuler du temps en utilisant gprof – le profileur gnu

Le programme lui-même se termine bien et je n’ai aucune raison de croire que les données de profil ne sont pas écrites correctement (comme cela a été suggéré ici: gprof signale que le temps n’a pas été accumulé )

Comme tout cela est fait dans Windows 7, essayer d’utiliser Shark ou Valgrind n’est pas une option.

Y a-t-il une raison pour laquelle il enregistre des 0.00s dépensés dans chaque fonction?

gprof ne compte aucun temps bloqué, comme les entrées / sorties ou autres. De plus, “self time” est généralement très petit dans toute routine qui fait tout son travail dans les sous-fonctions, comme si vous utilisiez principalement une bibliothèque dans une DLL où gprof ne pouvait pas le voir. Cochez cette réponse.