突发奇想:一个函数怎么知道自己是被谁调用?
目前程序遇到点问题:运行几天后可能会出错,在日志文件中已知道是在哪个函数中出错了。程序中调用这个子函数的地方很多,怎么知道是具体哪一个调用出了问题?
刚开始时想
private function foo(byval value as string,optional byval whoCalls as string="")
,在每一处调用时(或者,只是重点怀疑的地方),把当前函数/过程的名称传给whoCalls,这样在错误日志中就知道了。
但是,调用这个子函数的地方实在是有点多,改的话,太麻烦。
有知道有没有什么方法能方便地知道调用者的信息?
PS.google了一下,好像python有这功能
[Quote=引用]
在一个函数中
def fun():pass
这个函数如何知道是谁调用了它呢? 在C类语言中好像是很难的。但在 Python中却很简单
import traceback
def fun():
s = traceback.extract_stack()
print '%s Invoked me!'%s[-2][2]
这个 fun 函数就可以知道是谁调用了它,并打印出来, 我们来试一下:
>>> def a():fun()
>>> def b():fun()
>>> a()
a Invoked me!
>>> b()
b Invoked me!
>>>
ok! 怎么应用这个特性呢? 发挥各位的想象力了。
[/Quote]