Ich gehe davon aus, dass es darum geht, Code zu finden, der viel Zeit in Anspruch nimmt und den man optimieren könnte, um diese Zeit zu sparen. Das ist ein anderes Ziel als nur die Zeitmessung von Routinen.
Ich bin skeptisch gegenüber statischen Analysatoren, denn alles hängt von der Mischung der Eingabedaten ab.
Die dynamische Instrumentierung versucht, Eigenschaften von Funktionen zu messen, wie z. B.: Eigenzeit und Gesamtzeit, absolut, durchschnittlich und in Prozent. Auch die Anzahl der Aufrufe und die Rolle der einzelnen Routinen im Aufrufdiagramm.
Dynamische Instrumentierung (a la gprof ) ist seit Jahrzehnten der De-facto-Standard, aber er ist bei weitem nicht das letzte Wort. Zum einen muss man sich darüber im Klaren sein, dass die meisten der Statistiken, die sie liefert, am eigentlichen Bedarf vorbeigehen.
Heutzutage (IMHO) brauchen Sie einen Sampling-Profiler, der den Aufrufstapel abtastet, nicht nur den Programmzähler. Er sollte Stichproben zur Wanduhrzeit und nicht nur zur CPU-Zeit nehmen. Die Stichproben müssen nicht mit hoher Frequenz gezogen werden. Er sollte das Sampling unterdrücken, wenn die Anwendung auf Benutzereingaben wartet. Es sollte Ihnen Informationen auf Zeilen- oder Anweisungsebene liefern, nicht nur auf Funktionsebene. Die wichtigste Statistik, die es Ihnen für eine Codezeile liefern sollte, ist der Prozentsatz der Stichproben, die sie enthalten, denn das ist das direkteste Maß für die Zeit, die eingespart werden kann, wenn diese Zeile optimiert wird.
Einige Profiler können dies tun, insbesondere Oprofile und RotateRight/Zoom.