你有多少次陷入不得不更改别人代码的境地?如果你是一个开发团队的一员,那么你遇到上述境地的次数比你想要的还要多。然而,Python中有一个整洁的调试特性(像其他大多数语言一样),在这种情况下使用非常方便。本文是一篇快速教程,希望它能让你的编码生活更加容易。
1. 一个混乱的程序
出于本教程的目的,让我们研究一下下面的简单程序。
这个程序接收两个命令行参数,然后执行加法和减法操作。
(假设用户输入的是有效值,因此代码中我们没有进行错误处理。)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
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(): #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 subtraction if __name__ == '__main__': main() |
2. PDB
Python提供了一个有用的模块PDB,它实际上是一个交互式源代码调试器。
你需要下面的两行代码来使用此模块。
1 2 |
import pdb pdb.set_trace() |
看一下我们修改过的程序,里面包含了一些断点。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
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(): #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 subtraction if __name__ == '__main__': main() |
3. 程序执行触发调试器
一旦你设置好断点以后,你就可以像平时一样执行程序。
1 |
python debugger.py 1 2 |
程序将会在遇到的第一个断点处停止执行。
1 2 3 4 |
['debugger.py'] > /Users/someuser/debugger.py(15)main() -> addition = add(sys.argv[1], sys.argv[2]) (Pdb) |
我们在第14行设置了一个断点,所以我们能看到将要执行的下一行是第15行。可以看到,在执行到第15行之前程序已经停止。
在这里我们有几个选项,让我们在下面步骤中看看一些调试指令。
4. 下一行->n
在你的调试器提示中,输入n运行到下一行。
ޗ不更改别人代码的境地?如果你是一个开发团队的一员,那么你遇到上述境地的次数比你想要的还要多。然而,Python中有一个整洁的调试特性(像其他大多数语言一样),在这种情况下使用非常方便。本文是一篇快速教程,希望它能让你的编码生活更加容易。
1. 一个混乱的程序出于本教程的目的,让我们研究一下下面的简单程序。 这个程序接收两个命令行参数,然后执行加法和减法操作。 (假设用户输入的是有效值,因此代码中我们没有进行错误处理。)
2. PDBPython提供了一个有用的模块PDB,它实际上是一个交互式源代码调试器。 你需要下面的两行代码来使用此模块。
看一下我们修改过的程序,里面包含了一些断点。
3. 程序执行触发调试器一旦你设置好断点以后,你就可以像平时一样执行程序。
程序将会在遇到的第一个断点处停止执行。
我们在第14行设置了一个断点,所以我们能看到将要执行的下一行是第15行。可以看到,在执行到第15行之前程序已经停止。 在这里我们有几个选项,让我们在下面步骤中看看一些调试指令。 4. 下一行->n在你的调试器提示中,输入n运行到下一行。
|