
A call graph (also known as a call multigraph
) is a
control-flow graph,
which represents calling relationships between
subroutines in a
computer program
A computer program is a sequence or set of instructions in a programming language for a computer to Execution (computing), execute. It is one component of software, which also includes software documentation, documentation and other intangibl ...
. Each node represents a procedure and each edge ''(f, g)'' indicates that procedure ''f'' calls procedure ''g''. Thus, a
cycle in the graph indicates recursive procedure calls.
Basic concepts
Call graphs can be dynamic or static. A dynamic call graph is a record of an execution of the program, for example as output by a profiler. Thus, a dynamic call graph can be exact, but only describes one run of the program. A static call graph is a call graph intended to represent every possible run of the program. The exact static call graph is an
undecidable problem
In computability theory and computational complexity theory, an undecidable problem is a decision problem for which it is proved to be impossible to construct an algorithm that always leads to a correct yes-or-no answer. The halting problem is an ...
, so static call graph algorithms are generally overapproximations. That is, every call relationship that occurs is represented in the graph, and possibly also some call relationships that would never occur in actual runs of the program.
Call graphs can be defined to represent varying degrees of precision. A more precise call graph more precisely approximates the behavior of the real program, at the cost of taking longer to compute and more memory to store. The most precise call graph is fully ''context-sensitive'', which means that for each procedure, the graph contains a separate node for each
call stack
In computer science, a call stack is a Stack (abstract data type), stack data structure that stores information about the active subroutines and block (programming), inline blocks of a computer program. This type of stack is also known as an exe ...
that procedure can be activated with. A fully context-sensitive call graph is called a
calling context tree. This can be computed dynamically easily, although it may take up a large amount of memory. Calling context trees are usually not computed statically, because it would take too long for a large program. The least precise call graph is ''context-insensitive'', which means that there is only one node for each procedure.
With languages that feature
dynamic dispatch (e.g.
Java
Java is one of the Greater Sunda Islands in Indonesia. It is bordered by the Indian Ocean to the south and the Java Sea (a part of Pacific Ocean) to the north. With a population of 156.9 million people (including Madura) in mid 2024, proje ...
or
C++),
first-class functions
In computer science, a programming language is said to have first-class functions if it treats function (programming), functions as first-class citizens. This means the language supports passing functions as arguments to other functions, returning ...
(e.g.
Python or
Racket), or
function pointers (e.g.
C), computing a static call graph precisely requires
alias analysis results. Conversely, computing precise aliasing requires a call graph. Many static analysis systems solve the apparent infinite regress by computing both simultaneously.
Usages
Call graphs can be used in different ways. One simple application of call graphs is finding procedures that are never called. Call graphs can act as documentation for humans to
understand programs. Call graphs can also be used to detect anomalies of program execution or code injection attacks.
Software
Free software
Free software, libre software, libreware sometimes known as freedom-respecting software is computer software distributed open-source license, under terms that allow users to run the software for any purpose as well as to study, change, distribut ...
call graph generators
Run-time call graph (most of tools listed are profilers with call graph functionality)
*
gprof
Gprof is a performance analysis tool for Unix applications. It used a hybrid of instrumentation and samplingSusan L. Graham, Peter B. Kessler, and Marshall K. Mckusick''gprof: a Call Graph Execution Profiler''// Proceedings of the SIGPLAN '82 Sy ...
: included in BSD or part of the
GNU Binary Utilities
* callgrind : part of
Valgrind
KCachegrind: powerful tool to generate and analyze call graphs based on data generated by callgrind
* Mac OS X Activity Monitor : Apple GUI process monitor Activity Monitor has a built-in call graph generator that can sample processes and return a call graph. This function is only available in
Mac OS X Leopard
* OpenPAT : includes the
control_flow
tool which automatically creates a
Graphviz
Graphviz (short for ''Graph Visualization Software'') is a package of open-source software, open-source tools initiated by AT&T Labs, AT&T Labs Research for Graph drawing, drawing graph (discrete mathematics), graphs (as in Vertex (graph theory ...
call-graph picture from runtime measurements.
pprof open source tool for visualization and analysis of profile data, to be used in conjunction wit
*
CodeAnalyst from
AMD (released under GPL)
makeppgraphis a dependency graph generator (at module level) for builds performed with
makepp.
Intel(R) Single Event API(free, open-source)
Static for getting call graphs without running application
; C/C++
*
Sourcetrail creates a static call graph, that can be dynamically explored by the user. Also supports Python and Java
*
doxygen : Uses
Graphviz
Graphviz (short for ''Graph Visualization Software'') is a package of open-source software, open-source tools initiated by AT&T Labs, AT&T Labs Research for Graph drawing, drawing graph (discrete mathematics), graphs (as in Vertex (graph theory ...
to generate static call/inheritance diagrams
Cally a tool that uses GCC's Register Transfer Language (RTL) files to build a caller or callee call graphs for C projects.
*
cflow : GNU cflow is able to generate the direct and inverted call graph of a C program
egypt: a small
Perl
Perl is a high-level, general-purpose, interpreted, dynamic programming language. Though Perl is not officially an acronym, there are various backronyms in use, including "Practical Extraction and Reporting Language".
Perl was developed ...
script that uses gcc and
Graphviz
Graphviz (short for ''Graph Visualization Software'') is a package of open-source software, open-source tools initiated by AT&T Labs, AT&T Labs Research for Graph drawing, drawing graph (discrete mathematics), graphs (as in Vertex (graph theory ...
to generate the static call graph of a C program.
Analizo calculates source code metrics, generates dependency graphs.
CCTree: Native
Vim plugin that can display static call graphs by reading a
cscope database. Works for C programs.
codeviz: a static call graph generator (the program is ''not'' run). Implemented as a patch to
gcc; works for C and C++ programs.
calltree.sh: Bash shell functions that glue together cscope, graphviz, and a sampling of dot-rendering tools to display "caller" and "callee" relationships above, below, and/or between the C functions you specify.
tceetree: like calltree.sh, it connects
Cscope and
Graphviz
Graphviz (short for ''Graph Visualization Software'') is a package of open-source software, open-source tools initiated by AT&T Labs, AT&T Labs Research for Graph drawing, drawing graph (discrete mathematics), graphs (as in Vertex (graph theory ...
, but it is an executable rather than a bash script.
;Go
go-callvis: an interactive call graph generator for Go programs whose output can be drawn with
Graphviz
Graphviz (short for ''Graph Visualization Software'') is a package of open-source software, open-source tools initiated by AT&T Labs, AT&T Labs Research for Graph drawing, drawing graph (discrete mathematics), graphs (as in Vertex (graph theory ...
;Multi-language
callGraph: open-source call graph generator for awk, bash, basic, dart, fortran, go, lua, javascript, julia, kotlin, matlab, perl, pascal, php, python, R, raku, ruby, rust, scala, swift, tcl, and typescript.
;.NET
*
NDepend :is a static analysis tool for .NET code. This tool supports a large number of code metrics, allows for visualization of dependencies using directed graphs and dependency matrix.
;PHP, Perl and Python
Devel::NYTProf: a Perl performance analyser and call chart generator
phpCallGraph: a call graph generator for PHP programs that uses
Graphviz
Graphviz (short for ''Graph Visualization Software'') is a package of open-source software, open-source tools initiated by AT&T Labs, AT&T Labs Research for Graph drawing, drawing graph (discrete mathematics), graphs (as in Vertex (graph theory ...
. It is written in PHP and requires at least PHP 5.2.
pycallgraph : a call graph generator for Python programs that uses
Graphviz
Graphviz (short for ''Graph Visualization Software'') is a package of open-source software, open-source tools initiated by AT&T Labs, AT&T Labs Research for Graph drawing, drawing graph (discrete mathematics), graphs (as in Vertex (graph theory ...
.
pyan: a static call graph generator for Python programs that uses
Graphviz
Graphviz (short for ''Graph Visualization Software'') is a package of open-source software, open-source tools initiated by AT&T Labs, AT&T Labs Research for Graph drawing, drawing graph (discrete mathematics), graphs (as in Vertex (graph theory ...
.
gprof2dot: A call graph generator written in Python that converts profiling data for many languages/runtimes to a
Graphviz
Graphviz (short for ''Graph Visualization Software'') is a package of open-source software, open-source tools initiated by AT&T Labs, AT&T Labs Research for Graph drawing, drawing graph (discrete mathematics), graphs (as in Vertex (graph theory ...
callgraph.
code2flow A call graph generator for Python and Javascript programs that uses
Graphviz
Graphviz (short for ''Graph Visualization Software'') is a package of open-source software, open-source tools initiated by AT&T Labs, AT&T Labs Research for Graph drawing, drawing graph (discrete mathematics), graphs (as in Vertex (graph theory ...
rcviz: Python module for rendering runtime-generated call graphs with
Graphviz
Graphviz (short for ''Graph Visualization Software'') is a package of open-source software, open-source tools initiated by AT&T Labs, AT&T Labs Research for Graph drawing, drawing graph (discrete mathematics), graphs (as in Vertex (graph theory ...
. Each node represents an invocation of a function with the parameters passed to it and the return value.
;XQuery
XQuery Call Graphs from the XQuery Wikibook A call graph generator for an XQuery function module that uses
Graphviz
Graphviz (short for ''Graph Visualization Software'') is a package of open-source software, open-source tools initiated by AT&T Labs, AT&T Labs Research for Graph drawing, drawing graph (discrete mathematics), graphs (as in Vertex (graph theory ...
Proprietary call graph generators
;
LDRA Testbed : Static and dynamic analysis engines for both host and embedded software, with a myriad of reports including call graphs.
;
Project Analyzer : Static code analyzer and call graph generator for Visual Basic code
;
Visual Expert :
Static code analyzer and call graph generator for
Oracle
An oracle is a person or thing considered to provide insight, wise counsel or prophetic predictions, most notably including precognition of the future, inspired by deities. If done through occultic means, it is a form of divination.
Descript ...
PL/SQL,
SQLServer Transact-SQL,
C# and
PowerBuilder code
;
Intel VTune Performance Analyzer : Instrumenting profiler to show call graph and execution statistics
;
DMS Software Reengineering Toolkit : Customizable program analysis tool with static whole-program global call graph extraction for C, Java and COBOL
Other, related tools
;
Graphviz
Graphviz (short for ''Graph Visualization Software'') is a package of open-source software, open-source tools initiated by AT&T Labs, AT&T Labs Research for Graph drawing, drawing graph (discrete mathematics), graphs (as in Vertex (graph theory ...
: Turns a text representation of any graph (including a call graph) into a picture.
;
tsort : Command-line utility that performs a topological sort.
Sample graph
A sample call graph generated from
gprof
Gprof is a performance analysis tool for Unix applications. It used a hybrid of instrumentation and samplingSusan L. Graham, Peter B. Kessler, and Marshall K. Mckusick''gprof: a Call Graph Execution Profiler''// Proceedings of the SIGPLAN '82 Sy ...
analyzing itself:
index called name , index called name
72384/72384 sym_id_parse 4 , 1508/1508 cg_dfn 5 72384 match , 3 1508 pre_visit 3---------------------- , ----------------------
4/9052 cg_tally 2 , 1508/1508 cg_assemble 8 3016/9052 hist_print 9 , 4 1508 propagate_time 4 6032/9052 propagate_flags 2 , ----------------------
9052 sym_lookup , 2 cg_dfn 5---------------------- , 1507/1507 cg_assemble 8 5766/5766 core_create_function_syms 1 5 1507+2 cg_dfn 5 5766 core_sym_class , 1509/1509 is_numbered ---------------------- , 1508/1508 is_busy 1 24/1537 parse_spec 9 , 1508/1508 pre_visit 3 1513/1537 core_create_function_syms 1 1508/1508 post_visit 2 1537 sym_init , 2 cg_dfn 5---------------------- , ----------------------
1511/1511 core_create_function_syms 1 1505/1505 hist_print 9 1511 get_src_info , 6 1505 print_line 6---------------------- , 2/9 print_name_only 5 2/1510 arc_add 1 , ----------------------
1508/1510 cg_assemble 8 , 1430/1430 core_create_function_syms 1 1510 arc_lookup , 7 1430 source_file_lookup_path 7---------------------- , ----------------------
1509/1509 cg_dfn 5 , 24/24 sym_id_parse 4 1509 is_numbered , 8 24 parse_id 8---------------------- , 24/24 parse_spec 9 1508/1508 propagate_flags 2 , ----------------------
0 1508 inherit_flags 0 , 24/24 parse_id 8---------------------- , 9 24 parse_spec 9 1508/1508 cg_dfn 5 , 24/1537 sym_init 1 1508 is_busy 1 , ----------------------
---------------------- , 24/24 main 210 1508/1508 cg_dfn 5 , 0 24 sym_id_add 0 2 1508 post_visit 2 ,
See also
*
Software visualization
*
Dependency graph
References
{{Reflist
Compiler construction
Documentation generators
Static program analysis
Graph data structures