第十六章:开发工具-pdb:交互式调试工具-控制调试工具-检查栈中的变量

16.7.2.2 检查栈中的变量
栈中的各个帧会唯护一组变量,包括所执行函数的局部值和全局状态信息。pdb提供了多种方法来检查这些变量的内容。

#!/usr/bin/env python3
# encoding: utf-8
#
# Copyright (c) 2019 Iglesias. All rights reserved.
#

import pdb


def recursive_function(n=5,output='to be printed'):
    if n > 0:
        recursive_function(n - 1)
    else:
        pdb.set_trace()
        print(output)
    return


if __name__ == '__main__':
    recursive_function()

args命令(缩写为a)会打印当前帧中活动函数的所有参数。这个例子还使用了一个递归函数,可以显示where打印内容时的一个更深的栈。
在这里插入图片描述
p命令会评估作为参数给定的一个表达式,并打印结果。也可以使用Python的print()函数,不过要把它传递到解释器执行,而不是在调试工具中作为一个命令运行。
在这里插入图片描述
类似地,在一个表达式前面加上前缀!就会把它传递到Python解释器进行评估。这个特性可以用来执行任意的Python语句,包括修改变量。下面这个例子在允许调试工具继续运行程序之前会修改output的值。set_tracec()调用后的下一条语句在打印output的值时会显示修改后的值。
在这里插入图片描述

对于更复杂的值,如嵌套数据结构或大型数据结构,要使用pp以“完美打印”的格式来打印。下面这个程序从一个文件读取多个文本行。

#!/usr/bin/env python3
# encoding: utf-8
#
# Copyright (c) 2019 Iglesias. All rights reserved.
#

import pdb

with open('lorem.txt','rt') as f:
    lines = f.readlines()


pdb.set_trace()

用p打印变了lines时,得到的输出很难读,因为它的换行很糟糕。pp使用pprint格式化值,从而能更美观地打印。
在这里插入图片描述
对于交互式探索和试验,可以从调试工具回到标准的Python交互式提示窗口(已经填充当前帧的全局和局部值)。
在这里插入图片描述
交互式解释器可以改变类似列表可变对象。与之相反,不可变的对象是不能改变的,它们的名字不能被重新绑定到新值。
在这里插入图片描述
使用文件结束序列Ctrl-D退出交互式提示窗口,并返回到调试工具。在这个例子中,列表l已经改变,但是m和n的值没有改变。
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值