atree - activation trees for program understanding and debugging

atree runs a program through GDB. It sets breakpoints on all
functions and makes a log of all the functions that got called. The
log contains the arguments and return values of the functions. This
log is then turned into a tree — a node in the tree is a
function call and its children are the functions that it called, in
order.

This tree is called an activation tree (each execution of a function
is called an activation).