How can I get the name of a calling function within a module in Mathematica?

debugging, wolfram-mathematica

Solution

The `Stack` function will do almost exactly what you want, giving a list of the "tags" (for your purposes, read "functions") that are in the call stack. It's not bullet-proof, because of the existence of other functions like `StackBegin` and `StackInhibit`, but those are very exotic to begin with.

In most instances, `Stack` will return the symbols that name the functions being evaluated. To figure out what context those symbols are from, you can use the `Context` function, which is aboput as close as you can come to figuring out what package they're a part of. This requires some care, though, as symbols can be added to packages dynamically (via `Get`, `Import`, `ToExpression` or `Symbol`) and they can be redefined or modified (with new evaluation rules, for instance) in other packages as well.

Problem

If I write a function or module that calls another module, how can I get the name of the calling function/module? This would be helpful for debugging purposes.

Original source