Einfaches Werkzeug für callgraph in C ++
-
19-09-2019 - |
Frage
Gibt es ist einfaches Werkzeug, das verwendet werden kann, aus, um zu bestimmen, wo eine Funktion aufgerufen wird, die andere Funktion ruft die Funktion ...?
Bearbeiten . Ich verwende Mac OS X (10.6) und will nur statische Analyse tun
Danke!
Lösung
Wie wäre es cscope ? Check out 3. und 4. Geschoss Elemente auf der Seite:
- Funktionen durch eine Funktion namens
- Funktionen Aufruf einer Funktion
Es ist schon eine Weile her, seit ich cscope auf C ++ verwendet, scheine ich es erinnere mich, dass rock-solid auf C-Code, aber nicht so stark mit C ++.
Andere Tipps
gtags ist ein Werkzeug, das Sie zu tun Tagging verwenden können, aber für Call und Tracing.
http://www.gnu.org/software/global/
Dies unterstützt C, C ++, Yacc, Java und PHP4. Aber es kann nicht damit umgehen C ++ Vorlagen oder andere komplexe Stoffe richtig.
Dieses Tagging-Parser verwenden, ich habe ein Skript einen Aufrufbaum
bekommen
Benutzerauswahl durch bash Abschluss wie folgt aus,
es ist, einen Aufrufbaum in Google Profiler Code Anzeige:
% global-calltree -x prof_handler Add Evict ProfileData Stop DisableHandler RAW_CHECK WRITE_TO_STDERR
prof_handler:414 => Add:441 |profiler.cc |instance_.collector_.Add(depth, stack);
Add:241 => Evict:290 |profiledata.cc |Evict(*e);
Evict:61 => ProfileData:75 |profiledata.cc |ProfileData::ProfileData()
ProfileData:124 => Stop:125 |profiledata.cc |Stop();
Stop:261 => DisableHandler:273 |profiler.cc |DisableHandler();
DisableHandler:400 => RAW_CHECK:405 |profiler.cc |RAW_CHECK(sigaction(SIGPROF, &sa, NULL) == 0, "sigaction failed");
RAW_CHECK:83 => WRITE_TO_STDERR:86 |base/logging.h |WRITE_TO_STDERR("Check failed: " #condition ": " message "\n", \
WRITE_TO_STDERR:59 => DECLARE_int32:65 |base/logging.h |DECLARE_int32(verbose);
Sie wissen nicht, über einfache Werkzeuge, aber kostenlos, gibt es codeviz (sehen Sie, welche Deponien statt generieren Diagramme lesen, wenn Sie es vorziehen, dass). Caveat: alle statischen Analyse-Tools haben einige Probleme mit virtuellen Anrufen, und noch schlimmer mit Vorlagen.
Seit verwenden Sie Mac OS, Klirren ist ein neuer Compiler mit statischer Analyse-Funktion.
Ein Beispiel auf youtube: Bugs zu finden, mit Klirren