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.
views:
50answers:
1The 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.