python 断点跟踪

当有异常发生时,可以利用sys.exc_info()获得异常发生点的TraceBack。但正常状态如何获得TraceBack呢?查了很 久资料都没有找到答案。
想来想去,只找到两种不完美的方案:
【方案一】
主动引发一个异常,从而获得其TraceBack。事实上,traceback.extract_stack里就是这么干的:
1 def extract_stack(f=None, limit = None):
2    
3    if f is None:
4        try:
5            raise ZeroDivisionError
6        except ZeroDivisionError:
7            f = sys.exc_info()[2].tb_frame.f_back
8    
这种强行引发异常的方法,肯定会降低性能。
【方案二】
利用sys.settrace,自行对调用堆栈进行跟踪。大致这样来做:
1 def mytrace(frame, event, args):
2    if (event == ’call’):
3        
4    elif (event == ’return’):
5        
6 sys.settrace(mytrace)
这样做,所有的调用都会额外地引发这段自定义处理,显然也会严重影响性能。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值