nion hat einen sehr interessanten Artikel zum Thema
Callgraphen generieren veröffentlicht. Darin stellt er zwei verschiedene Methoden vor, um Callgraphen zu generieren, und zwar einerseits ein Tool namens "egypt", das aus der
Register transfer language, die GCC per Commandline-Switch ausspucken kann, Files für das Tool "dot" generiert, und andererseits eine Methode, bei der über einen GCC-Commandline-Switch für jeden Funktionsein- und -austritt je ein Funktionsaufruf in den Code eingefügt wird, und über eine per LD_PRELOAD nachgeladene Shared Library zur Laufzeit ein dynamischer Callgraph der tatsächlichen Ausführung aufgezeichnet wird, ebenfalls für dot. Für Programmierer, die sich auch mit der Instrumentierung von Code auseinandersetzen, wird der Artikel auf jeden Fall interessant sein.
Mit C++ funktioniert das ganze
grundsätzlich auch, allerdings werden die Graphen bei der Verwendung der C++ Standard Library, insbesondere der über Templates realisierten Klassen, sehr schnell sehr gross. Allein das Starten von newsbeuter bei einem leeren Cache-File spuckt ein ca. 30 MB (!!) großes dot-File aus.