de source ayant comme ceci:Débogage fonctions lentes dans les programmes C (construits par gcc)
void foo() {
func1();
if(qqq) {
func2();
};
func3();
func4();
for(...) {
func5();
}
}
Je veux obtenir les informations comme ceci:
void foo() {
5 ms; 2 times; func1();
0 ms; 2 times; if(qqq) {
0 ms; 0 times; func2();
0 ms; 2 times; };
20 ms; 2 times; func3();
5 s ; 2 times; func4();
0 ms; 60 times; for(...) {
30 ms; 60 times; func5();
0 ms; 60 times; }
}
à savoir des informations sur le temps moyen qu'il a fallu pour exécuter cette ligne (temps réel de l'horloge, y compris l'attente dans les syscalls) et combien de fois est-il exécuté.
Quels outils devrais-je utiliser? Je souhaite que l'outil instrumentation chaque fonction pour mesurer son temps d'exécution, qui est utilisé par l'instrumentation à l'intérieur de la fonction d'appel qui écrit le fichier journal (ou compte en mémoire, puis dumps).
Pouvez-vous envisager une attente légèrement différente? Quand une ligne de code est active, elle est sur la pile, donc si vous connaissez le temps total, et la fraction de temps qu'une ligne est sur la pile, vous savez combien de temps elle est responsable. Vous pouvez obtenir cette information à partir des échantillons de la pile, et cela indique quelles lignes de code (et les fonctions, si vous préférez) apporteraient le plus d'avantages si elles étaient optimisées. –