It's a long time since I've done any Lisp, but I've been using GraphViz recently.
Googling for common lisp tracing, I see that TRACE outputs something like:
0: (FACTORIAL 4)
1: (FACTORIAL 3)
2: (FACTORIAL 2)
3: (FACTORIAL 1)
3: returned 1
2: returned 2
1: returned 6
0: returned 24
If I understand that format correctly, it should be pretty easy to write a program in your favourite scripting language, to convert it into .dot
output "digraph G {"
while(get line) {
if(this line is more indented than previous line) {
caller = parsed from previous line
called = parsed from this line
output "caller -> called;"
}
}
output "}";
That's for runtime analysis. One could also do static source analysis so that instead of:
fact(4) -> fact (3) -> fact(2) -> fact(1)
... you'd just get
fact <-.
|____|