首页 > 编程 > Python > 正文

使用Python中PDB模块中的命令来调试Python代码的教程

2020-02-23 00:26:04
字体:
来源:转载
供稿:网友

你有多少次陷入不得不更改别人代码的境地?如果你是一个开发团队的一员,那么你遇到上述境地的次数比你想要的还要多。然而,Python中有一个整洁的调试特性(像其他大多数语言一样),在这种情况下使用非常方便。本文是一篇快速教程,希望它能让你的编码生活更加容易。
1. 一个混乱的程序

出于本教程的目的,让我们研究一下下面的简单程序。

这个程序接收两个命令行参数,然后执行加法和减法操作。

(假设用户输入的是有效值,因此代码中我们没有进行错误处理。)
 

import sysdef add(num1=0, num2=0):  return int(num1) + int(num2)def sub(num1=0, num2=0):  return int(num1) - int(num2)def main():  #Assuming our inputs are valid numbers  print sys.argv  addition = add(sys.argv[1], sys.argv[2])  print addition  subtraction = sub(sys.argv[1], sys.argv[2])  print subtractionif __name__ == '__main__':  main()

2. PDB

Python提供了一个有用的模块PDB,它实际上是一个交互式源代码调试器。

你需要下面的两行代码来使用此模块。
 

import pdbpdb.set_trace()

看一下我们修改过的程序,里面包含了一些断点。
 

import pdbimport sysdef add(num1=0, num2=0):  return int(num1) + int(num2)def sub(num1=0, num2=0):  return int(num1) - int(num2)def main():  #Assuming our inputs are valid numbers  print sys.argv  pdb.set_trace() # <-- Break point added here  addition = add(sys.argv[1], sys.argv[2])  print addition  subtraction = sub(sys.argv[1], sys.argv[2])  print subtractionif __name__ == '__main__':  main()

3. 程序执行触发调试器

一旦你设置好断点以后,你就可以像平时一样执行程序。
 

python debugger.py 1 2

程序将会在遇到的第一个断点处停止执行。
 

['debugger.py']> /Users/someuser/debugger.py(15)main()-> addition = add(sys.argv[1], sys.argv[2])(Pdb)

我们在第14行设置了一个断点,所以我们能看到将要执行的下一行是第15行。可以看到,在执行到第15行之前程序已经停止。

在这里我们有几个选项,让我们在下面步骤中看看一些调试指令。
4. 下一行->n

在你的调试器提示中,输入n运行到下一行。
 

> /Users/someuser/debugger.py(14)main()-> addition = add(sys.argv[1], sys.argv[2])(Pdb) n> /Users/someuser/debugger.py(15)main()-> print addition

这会执行当前行代码,并准备执行下一行。

我们可以使用n来逐行执行整个程序,但这其实没有什么用处。

可能你已经看到,PDB实际上并没有进入我们的add函数中。下面,就让我们看看其他几个令调试更加有趣的选项。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表