2009-04-28 3 views
4

Ich arbeite an einem Projekt, bei dem ich herausfinden muss, welche Funktionen in bestimmten Linux-Programmen (geschrieben in C) mit bestimmten Eingaben aufgerufen werden. Mein aktueller Ansatz bestand darin, ein Programm mit der Option -pg (Profiling-Option) zu kompilieren, auszuführen und herauszufinden, welche Funktionen durch die Verarbeitung von gprofs Ausgabe aufgerufen werden. In der Ausgabedatei erscheinen nur Funktionen, die mindestens einmal aufgerufen wurden.Welche Funktionen werden in einem Multiprozessprogramm aufgerufen, ohne die Quelle zu ändern?

Das offensichtliche Problem ist, dass nur ein Prozess in die gprof-Ausgabedatei schreiben kann. Wenn das Programm mehrere Prozesse ausgibt, bekomme ich keine Profiling-Ausgabe von den anderen Prozessen.

Gibt es eine Möglichkeit, gprof eine Ausgabedatei für jeden Prozess erstellen zu lassen (möglicherweise mit PID gekennzeichnet)? Das Handbuch schlägt vor, dass jeder Prozess in ein anderes Verzeichnis geändert wird, aber ich möchte den Quellcode dafür nicht ändern. Gibt es ein anderes Tool für Linux, das helfen kann?

Antwort

3

Here sie schlagen vor, mit tprof:

Sie valgrind versucht haben?

http://www.network-theory.co.uk/docs/valgrind/valgrind_17.html

--child-silent-after-fork=<yes|no> [default: no] 

Wenn diese Funktion aktiviert ist, zeigt Valgrind wird keine Fehlersuche oder für das Kind Prozess Protokollierung Ausgabe von einer Gabel Aufforderung. Dies kann die Ausgabe weniger verwirrend (wenn auch irreführender) machen, wenn es um Prozesse geht, die Kinder erzeugen. Es ist besonders nützlich in Verbindung mit --trace-children =. Die Verwendung dieses Flags wird auch dringend empfohlen, wenn Sie eine XML-Ausgabe anfordern (--xml = yes), da sonst die XML-Daten von Kind und Eltern vertauscht werden können, was sie normalerweise unbrauchbar macht.