要想在程序运行时打印调用堆栈?可以的。网上一些代码给出了打印日志时打印函数调用时代码所在的行号等。因为信息太少,解释只言片语,而且是复制一大片,所以参考价值不大。然后我就深入去了解了一下,结果发现了很多好玩的东西。一起来看看吧。
这一切都归功于sys模块的_getframe()函数。此函数是获取函数调用的实时堆栈的信息。堆栈是分层的,可以一级级的跟踪函数的调用情况。这个在代码调试器里通常都提供这些调用堆栈信息。不必觉得调试器太神秘,我们现在就可以去看看堆栈都长成什么样。
sys模块的_getframe()函数获取的对象的结构如下:
sys
|___ _getframe() #当前堆栈信息
|___ f_back #调用此函数的堆栈信息
|___ f_builtins #系统内置对象信息
|___ f_code #代码相关信息
|___ f_exc_traceback
|___ f_exc_type
|___ f_exc_value
|___ f_globals #当前的全局变量
|___ f_lasti
|___ f__lineno #当前执行的代码的在文件的行数
|___ f_locals #当前的局部变量
|___ f_restricted
_getframe()函数执行后,获取到的是当前的堆栈信息。当然_getframe()默认只获取本级的堆栈信息。此函数默认的参数为depth=None,即表示获取的堆栈层数为0,即返回最顶层的堆栈项框架对象。堆栈的层级是先入后出的规则,当
>>阅读全文
标注
评论
站内搜
百度搜
传送到手机
手机扫码,识别文字,完成传送x
标注内容x
加载中...
添加标注x
评论