第十六章:开发工具-pdb:交互式调试工具-控制调试工具-单步执行程序

16.7.2.3 单步执行程序
除了程序暂停时在调用栈中上下导航处,还可以在进入调试工具那一点之后单步执行程序。

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

import pdb


def f(n):
    for i in range(n):
        j = i * n
        print(i,j)
    return


if __name__ == '__main__':
    pdb.set_trace()
    f(5)

使用step(缩写为s)执行当前行,然后在下一个执行点停止,这可能是所调用函数中的第一条语句,也可能是当前函数的下一行语句。

解释器会在set_trace()调用处暂停,并将控制交给调试工具。第一个step会执行进入f()。

下一个step会执行到f()的第一行,并开始循环。

执行下一步会移动到循环中的第一行,这里定义了j。

i的值为0,所以再执行一步后,j的值应当也是0。

在这里插入图片描述
像这样一次执行一步,如果在出现错误那一点之前需要执行大量代码,或者如果需要反复调用相同的函数,那么这会变得很麻烦。

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


import pdb


def calc(i,n):
    j = i * n
    return j

def f(n):
    for i in range(n):
        j = calc(i,n)
        print(i,j)
    return


if __name__ == '__main__':
    pdb.set_trace()
    f(5)

在这个例子中,calc()没有错误,所以如果每次在f()的循环中调用这个函数时都进行单步跟踪,那么执行时会显示calc()的所有代码行,这就对真正有用的输出造成了干扰。
在这里插入图片描述
next命令(缩写为n)有些类似step,不过不会从正在执行的语句进入所调用的函数。实际上,它会用一个操作完成整个函数调用,直接进入当前函数的下一条语句。

until命令类似于next,只不过它会继续执行,甚至执行到同一个函数中行号大于当前值的一行。这说明,可以用until跳过循环末尾。
在这里插入图片描述
运行until命令之前,当前行为18,即循环的最后一行。运行until之后,位于第19行,并且循环已经退出。
要想一直执行到一个特定的行,可以把这个行号传递给until命令。与设置断点时不同,传入until的行号必须大于当前行号,所以这个命令对于通过跳过很长的代码块来在函数中导航而言最为有用。
在这里插入图片描述
return命令也是绕开函数部分的一个捷径。它会继续执行,直至函数准备执行return语句,然后会暂停,使得在函数返回之前有时间查看返回值。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值