python函数调用堆栈过程_python的函数调用堆栈信息分析及应用

要想在程序运行时打印调用堆栈?可以的。网上一些代码给出了打印日志时打印函数调用时代码所在的行号等。因为信息太少,解释只言片语,而且是复制一大片,所以参考价值不大。然后我就深入去了解了一下,结果发现了很多好玩的东西。一起来看看吧。

这一切都归功于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

20171222151916777

标注内容x

加载中...

添加标注x

评论

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值