Knowledge

Call graph

Source 📝

598:|---------------------- 4/9052 cg_tally | 1508/1508 cg_assemble 3016/9052 hist_print | 1508 propagate_time 6032/9052 propagate_flags |---------------------- 9052 sym_lookup | 2 cg_dfn ---------------------- | 1507/1507 cg_assemble 5766/5766 core_create_function_syms | 1507+2 cg_dfn 5766 core_sym_class | 1509/1509 is_numbered ---------------------- | 1508/1508 is_busy 24/1537 parse_spec | 1508/1508 pre_visit 1513/1537 core_create_function_syms | 1508/1508 post_visit 1537 sym_init | 2 cg_dfn ---------------------- |---------------------- 1511/1511 core_create_function_syms | 1505/1505 hist_print 1511 get_src_info | 1505 print_line ---------------------- | 2/9 print_name_only 2/1510 arc_add |---------------------- 1508/1510 cg_assemble | 1430/1430 core_create_function_syms 1510 arc_lookup | 1430 source_file_lookup_path ---------------------- |---------------------- 1509/1509 cg_dfn | 24/24 sym_id_parse 1509 is_numbered | 24 parse_id ---------------------- | 24/24 parse_spec 1508/1508 propagate_flags |---------------------- 1508 inherit_flags | 24/24 parse_id ---------------------- | 24 parse_spec 1508/1508 cg_dfn | 24/1537 sym_init 1508 is_busy |---------------------- ---------------------- | 24/24 main 1508/1508 cg_dfn | 24 sym_id_add 1508 post_visit | 20: 71:
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
597:
index called name |index called name 72384/72384 sym_id_parse | 1508/1508 cg_dfn 72384 match | 1508 pre_visit ----------------------
79:
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
76:, 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. 92:. 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 335: : 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. 378: : 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. 190:
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
391::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. 143:
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
135:
results. Conversely, computing precise aliasing requires a call graph. Many static analysis systems solve the apparent infinite regress by computing both simultaneously.
89: 504: 756:
Grove, David; DeFouw, Greg; Dean, Jeffrey; Chambers, Craig; Grove, David; DeFouw, Greg; Dean, Jeffrey; Chambers, Craig (9 October 1997).
212: 830:
Gao, Debin; Reiter, Michael K.; Song, Dawn (25 October 2004). "Gray-box extraction of execution graphs for anomaly detection".
705: 672: 501:
Static and dynamic analysis engines for both host and embedded software, with a myriad of reports including call graphs.
553: 275:: a tool that uses GCC's Register Transfer Language (RTL) files to build a caller or callee call graphs for C projects. 789:
Eisenbarth, T.; Koschke, R.; Simon, D. (2001). "Aiding program comprehension by static and dynamic feature analysis".
884: 806: 889: 894: 879: 849: 633: 558:
Customizable program analysis tool with static whole-program global call graph extraction for C, Java and COBOL
535: 447: : A call graph generator written in Python that converts profiling data for many languages/runtimes to a 332: 420: 120: 116: 470:. Each node represents an invocation of a function with the parameters passed to it and the return value. 163: 104: 259:
creates a static call graph, that can be dynamically explored by the user. Also supports Python and Java
147:. Call graphs can also be used to detect anomalies of program execution or code injection attacks. 128: 211:, open source tool for visualization and analysis of profile data, to be used in conjunction with 517: 326: 232: 697: 690: 607: 187: : powerful tool to generate and analyze call graphs based on data generated by callgrind 831: 144: 528: 362: : an interactive call graph generator for Go programs whose output can be drawn with 173: 112: 60: 8: 202: 73: 833:
Proceedings of the 11th ACM conference on Computer and communications security - CCS '04
304: 19: 855: 812: 738: 281: : GNU cflow is able to generate the direct and inverted call graph of a C program 88:
that procedure can be activated with. A fully context-sensitive call graph is called a
36: 164:
Run-time call graph (most of tools listed are profilers with call graph functionality)
845: 802: 701: 668: 308: 742: 859: 837: 816: 794: 769: 730: 645: 612: 124: 100: 84:, which means that for each procedure, the graph contains a separate node for each 44: 573:
Turns a text representation of any graph (including a call graph) into a picture.
521: 424: 184: 132: 873: 798: 512: 454: 401: 338: 245: 156: 841: 791:
Proceedings IEEE International Conference on Software Maintenance. ICSM 2001
734: 231:
is a dependency graph generator (at module level) for builds performed with
539: 531: 496: 238: 774: 757: 636:; Kennedy, K. (April 1990). "Constructing the procedure call multigraph". 662: 444: 256: 228: 218: 318: 466: : Python module for rendering runtime-generated call graphs with 407: 359: 85: 40: 457:: A call graph generator for Python and Javascript programs that uses 434: 375: 649: 463: 278: 721:
Ryder, B.G. (May 1979). "Constructing the Call Graph of a Program".
437: : a static call graph generator for Python programs that uses 272: 568: 509:
Static code analyzer and call graph generator for Visual Basic code
484: 467: 458: 448: 438: 428: 417: 411: 363: 346: 292: 266: 191: 179: 550:
Instrumenting profiler to show call graph and execution statistics
208: 483:: A call graph generator for an XQuery function module that uses 388: 262: 524: 480: 342: 312: 23:
A call graph generated for a simple computer program in Python.
301:: calculates source code metrics, generates dependency graphs. 96:, which means that there is only one node for each procedure. 591: 576: 545: 427: : a call graph generator for Python programs that uses 284: 169: 108: 404: : a Perl performance analyser and call chart generator 288: 410: : a call graph generator for PHP programs that uses 298: 246:
Static for getting call graphs without running application
222: 631: 311:
plugin that can display static call graphs by reading a
755: 788: 758:"Call graph construction in object-oriented languages" 663:
Uday Khedker; Amitabha Sanyal; Bageshri Sathe (2009).
581:
Command-line utility that performs a topological sort.
321: : a static call graph generator (the program is 155: 414:. It is written in PHP and requires at least PHP 5.2. 490: 349:, but it is an executable rather than a bash script. 131:), computing a static call graph precisely requires 689: 72:of the program. The exact static call graph is an 63:in the graph indicates recursive procedure calls. 696:. Springer Science & Business Media. p.  295:to generate the static call graph of a C program. 47:. Each node represents a procedure and each edge 39:, which represents calling relationships between 871: 656: 692:An Integrated Approach to Software Engineering 829: 687: 205:call-graph picture from runtime measurements. 269:to generate static call/inheritance diagrams 481:XQuery Call Graphs from the XQuery Wikibook 773: 723:IEEE Transactions on Software Engineering 681: 638:IEEE Transactions on Software Engineering 18: 665:Data Flow Analysis: Theory and Practice 562: 172: : included in BSD or part of the 872: 341: : like calltree.sh, it connects 720: 590:A sample call graph generated from 201:tool which automatically creates a 13: 554:DMS Software Reengineering Toolkit 14: 906: 749: 491:Proprietary call graph generators 66: 546:Intel VTune Performance Analyzer 325:run). Implemented as a patch to 585: 329:; works for C and C++ programs. 315:database. Works for C programs. 823: 782: 768:(10). ACM: 108, 108–124, 124. 714: 625: 1: 618: 520:and call graph generator for 197:OpenPAT : includes the 99:With languages that feature 7: 601: 150: 10: 911: 667:. CRC Press. p. 234. 836:. ACM. pp. 318–329. 632:Callahan, D.; Carle, A.; 291:script that uses gcc and 239:Intel(R) Single Event API 178:callgrind : part of 138: 51:indicates that procedure 885:Documentation generators 799:10.1109/icsm.2001.972777 890:Static program analysis 842:10.1145/1030083.1030126 735:10.1109/tse.1979.234183 688:Pankaj Jalote (1997). 608:Software visualization 24: 16:Structure in computing 895:Graph data structures 880:Compiler construction 775:10.1145/263700.264352 159:call graph generators 113:first-class functions 22: 793:. pp. 602–611. 563:Other, related tools 518:Static code analyzer 396:PHP, Perl and Python 225:(released under GPL) 174:GNU Binary Utilities 90:calling context tree 762:ACM SIGPLAN Notices 241:(free, open-source) 145:understand programs 94:context-insensitive 74:undecidable problem 594:analyzing itself: 423:2007-05-25 at the 37:control-flow graph 25: 707:978-0-387-94899-7 674:978-0-8493-3251-7 125:function pointers 82:context-sensitive 31:(also known as a 902: 864: 863: 827: 821: 820: 786: 780: 779: 777: 753: 747: 746: 718: 712: 711: 695: 685: 679: 678: 660: 654: 653: 650:10.1109/32.54302 629: 613:Dependency graph 505:Project Analyzer 287: : a small 200: 101:dynamic dispatch 55:calls procedure 45:computer program 910: 909: 905: 904: 903: 901: 900: 899: 870: 869: 868: 867: 852: 828: 824: 809: 787: 783: 754: 750: 719: 715: 708: 686: 682: 675: 661: 657: 630: 626: 621: 604: 599: 588: 565: 493: 425:Wayback Machine 307: : Native 248: 198: 166: 161: 153: 141: 69: 33:call multigraph 17: 12: 11: 5: 908: 898: 897: 892: 887: 882: 866: 865: 850: 822: 807: 781: 748: 729:(3): 216–226. 713: 706: 680: 673: 655: 644:(4): 483–487. 623: 622: 620: 617: 616: 615: 610: 603: 600: 596: 587: 584: 583: 582: 579: 574: 571: 564: 561: 560: 559: 556: 551: 548: 543: 515: 510: 507: 502: 499: 492: 489: 488: 487: 477: 476: 472: 471: 461: 452: 442: 432: 415: 405: 402:Devel::NYTProf 398: 397: 393: 392: 385: 384: 380: 379: 372: 371: 370:Multi-language 367: 366: 356: 355: 351: 350: 336: 330: 316: 302: 296: 282: 276: 270: 260: 253: 252: 247: 244: 243: 242: 236: 226: 216: 206: 195: 188: 182: 176: 165: 162: 160: 154: 152: 149: 140: 137: 133:alias analysis 68: 67:Basic concepts 65: 15: 9: 6: 4: 3: 2: 907: 896: 893: 891: 888: 886: 883: 881: 878: 877: 875: 861: 857: 853: 847: 843: 839: 835: 834: 826: 818: 814: 810: 808:0-7695-1189-9 804: 800: 796: 792: 785: 776: 771: 767: 763: 759: 752: 744: 740: 736: 732: 728: 724: 717: 709: 703: 699: 694: 693: 684: 676: 670: 666: 659: 651: 647: 643: 639: 635: 628: 624: 614: 611: 609: 606: 605: 595: 593: 580: 578: 575: 572: 570: 567: 566: 557: 555: 552: 549: 547: 544: 541: 537: 533: 530: 526: 523: 519: 516: 514: 513:Visual Expert 511: 508: 506: 503: 500: 498: 495: 494: 486: 482: 479: 478: 474: 473: 469: 465: 462: 460: 456: 453: 450: 446: 443: 440: 436: 433: 430: 426: 422: 419: 416: 413: 409: 406: 403: 400: 399: 395: 394: 390: 387: 386: 382: 381: 377: 374: 373: 369: 368: 365: 361: 358: 357: 353: 352: 348: 344: 340: 337: 334: 331: 328: 324: 320: 317: 314: 310: 306: 303: 300: 297: 294: 290: 286: 283: 280: 277: 274: 271: 268: 265: : Uses 264: 261: 258: 255: 254: 250: 249: 240: 237: 234: 230: 227: 224: 220: 217: 214: 210: 207: 204: 196: 193: 189: 186: 183: 181: 177: 175: 171: 168: 167: 158: 157:Free software 148: 146: 136: 134: 130: 126: 122: 118: 114: 110: 106: 102: 97: 95: 91: 87: 83: 77: 75: 64: 62: 58: 54: 50: 46: 42: 38: 34: 30: 21: 832: 825: 790: 784: 765: 761: 751: 726: 722: 716: 691: 683: 664: 658: 641: 637: 627: 589: 586:Sample graph 540:PowerBuilder 532:Transact-SQL 497:LDRA Testbed 408:phpCallGraph 322: 199:control_flow 142: 98: 93: 81: 78: 70: 56: 52: 48: 32: 28: 26: 634:Hall, M. W. 418:pycallgraph 333:calltree.sh 257:Sourcetrail 229:makeppgraph 219:CodeAnalyst 185:KCachegrind 41:subroutines 874:Categories 851:1581139616 619:References 451:callgraph. 360:go-callvis 213:gperftools 86:call stack 59:. Thus, a 29:call graph 529:SQLServer 455:code2flow 445:gprof2dot 376:callGraph 743:16527042 602:See also 569:Graphviz 485:Graphviz 468:Graphviz 459:Graphviz 449:Graphviz 439:Graphviz 429:Graphviz 421:Archived 412:Graphviz 364:Graphviz 347:Graphviz 339:tceetree 293:Graphviz 267:Graphviz 203:Graphviz 192:Mac OS X 180:Valgrind 151:Software 860:1189805 817:5934718 389:NDepend 319:codeviz 299:Analizo 263:doxygen 194:Leopard 35:) is a 858:  848:  815:  805:  741:  704:  671:  525:PL/SQL 522:Oracle 475:XQuery 343:Cscope 313:cscope 305:CCTree 233:makepp 139:Usages 127:(i.e. 123:), or 121:Racket 117:Python 115:(i.e. 103:(i.e. 49:(f, g) 856:S2CID 813:S2CID 739:S2CID 592:gprof 577:tsort 464:rcviz 285:egypt 279:cflow 273:Cally 251:C/C++ 221:from 209:pprof 170:gprof 61:cycle 43:in a 846:ISBN 803:ISBN 727:SE-5 702:ISBN 669:ISBN 542:code 538:and 435:pyan 383:.NET 345:and 289:Perl 105:Java 838:doi 795:doi 770:doi 731:doi 698:372 646:doi 327:gcc 323:not 309:Vim 223:AMD 119:or 111:), 109:C++ 107:or 876:: 854:. 844:. 811:. 801:. 766:32 764:. 760:. 737:. 725:. 700:. 642:16 640:. 536:C# 534:, 527:, 354:Go 27:A 862:. 840:: 819:. 797:: 778:. 772:: 745:. 733:: 710:. 677:. 652:. 648:: 441:. 431:. 235:. 215:. 129:C 57:g 53:f

Index


control-flow graph
subroutines
computer program
cycle
undecidable problem
call stack
calling context tree
dynamic dispatch
Java
C++
first-class functions
Python
Racket
function pointers
C
alias analysis
understand programs
Free software
gprof
GNU Binary Utilities
Valgrind
KCachegrind
Mac OS X
Graphviz
pprof
gperftools
CodeAnalyst
AMD
makeppgraph

Text is available under the Creative Commons Attribution-ShareAlike License. Additional terms may apply.