第十七章:运行时特性-sys:系统特定配置-跟踪程序运行情况-监视栈

17.2.7.3 监视栈
使用hook的另一方法是跟踪正则调用哪些函数,以及它们的返回值是什么。为了监视返回值,可以监视return事件。

#!usr/bin/env python3
# encoding: utf-8

import sys

def trace_calls_and_returns(frame,event,arg):
    co = frame.f_code
    func_name = co.co_name
    if func_name == 'write':
        # Ignore write() calls from printing.
        return
    line_no = frame.f_lineno
    filename = co.co_filename
    if event == 'call':
        print('* Call to {} on line {} of {}'.format(
            func_name,line_no,filename))
        return trace_calls_and_returns
    elif event == 'return':
        print('* {} => {}'.format(
            func_name,arg))
    return


def b():
    print('inside b()')
    return 'response_from_b'


def a():
    print('inside a()')
    val = b()
    return val * 2


sys.settrace(trace_calls_and_returns)
a()

局部跟踪函数用于监视返回事件,这说明调用一个函数时trace_calls_and_returns()需要返回自身的一个引用,从而能监视返回值。
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值