JDCallgraph records which methods actually call each other while a Java program runs. It is a Java agent (-javaagent:jdcallgraph.jar=config.ini) that instruments the target application with ByteBuddy or Javassist. It works with plain java and -jar runs as well as Maven and Ant test suites.

Besides call graphs, it can build a data dependency graph showing field access between methods. Output formats include CSV, Graphviz dot and a matrix, and the config file controls what gets traced and how.

This was a side-project of my master thesis about Fault Localization. I noticed there was no tool to record actual call patterns in Java programs, so I started building one.

Code: github.com/dkarv/jdcallgraph