使用PDB在Notebook对python代码进行调试

Posted 修炼之路

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用PDB在Notebook对python代码进行调试相关的知识,希望对你有一定的参考价值。

导读

当我们使用编译器来开发python项目的时候,可以利用编译器的自带的调试功能来对python的脚本进行调试。其实,在python3.7以后自带了一个调试器PDB,可以很方便的帮助我们在notebook中对python的代码进行调试,这篇文章就让我们来看看如何使用PDB进行调试吧

PDB调试代码

  • 一个简单的例子
    我们定义了两个方法,通过set_trace方法我们可以程序中设置断点
import pdb
import sys

def add(num1=0, num2=0):
    return int(num1) + int(num2)
    
def sub(num1=0, num2=0):
    return int(num1) - int(num2)
    
def main():
    num1 = 28
    num2 = 8
    pdb.set_trace() #添加断点
    addition = add(num1, num2)
    print (addition)
    subtraction = sub(num1, num2)
    print (subtraction)
    
if __name__ == '__main__':
    main()
  • PDB常用的命令
    在使用PDB调试的时候,当我们运行程序的时候会出现一个命令的窗口,通过输入命令来实现在notebook中对python的代码进行调试
ENTER (重复上次命令)
c (继续)
l (查找当前位于哪里)
s (进入子程序,如果当前有一个函数调用,那么 s 会进入被调用的函数体)
n(ext) 让程序运行下一行,如果当前语句有一个函数调用,用 n 是不会进入被调用的函数体中的
r (运行直到子程序结束)
!<python 命令>
h (帮助)
a(rgs) 打印当前函数的参数
j(ump) 让程序跳转到指定的行数
l(ist) 可以列出当前将要运行的代码块
p(rint) 最有用的命令之一,打印某个变量
q(uit) 退出调试
r(eturn) 继续执行,直到函数体返回
  • 下一行
    在运行cell中的代码之后,会出现一个下面的命令窗口

    ipdb的输入框中输入字母n然后回车运行,程序会跳到下一行不会进行到调用函数的内部,如果想要子函数内部进行调试可以在子函数内部添加set_trace来实现

  • 查看变量的值
    通过在ipdb中使用命令p 变量名输出变量的值

  • 动态添加断点
    在运行程序之后,我们可以通过在ipdb中输入b 行数动态的添加断点

  • 动态分配变量
    在使用pdb对程序进行调试的过程中,我们可以在ipdb中动态的设置变量的值来进行调试

  • 退出PDB调试
    通过命令q可以退出调试环境

参考

  1. https://howchoo.com/g/zgi2y2iwyze/debugging-your-python-code

以上是关于使用PDB在Notebook对python代码进行调试的主要内容,如果未能解决你的问题,请参考以下文章

pdb-不需要IDE也能调试

Python 代码使用pdb调试技巧

使用 pdb 进行调试

使用 python (Jupyter notebook) 对 json 数据进行数据预处理

python调试:pdb基本用法(转)

如何使用jupyter notebook