调试线程应用程序
本章我们将学习如何调试线程应用程序。我们还将学习调试的重要性。
什么是调试?
在计算机编程中,调试是查找和移除计算机程序中错误、异常和问题的过程。这个过程从代码编写之初就开始了,并在后续阶段继续进行,将代码与其他编程单元组合以形成软件产品。调试是软件测试过程的一部分,也是整个软件开发生命周期中不可或缺的一部分。
Python 调试器
Python 调试器或pdb是 Python 标准库的一部分。它是一个查找难以发现的错误的良好后备工具,允许我们快速可靠地修复有故障的代码。以下是pdb 调试器的两个最重要的任务:
- 它允许我们在运行时检查变量的值。
- 我们也可以单步执行代码并设置断点。
我们可以通过以下两种方式使用 pdb:
- 通过命令行;这也被称为事后调试。
- 通过交互式运行 pdb。
使用 pdb
要使用 Python 调试器,我们需要在想要进入调试器的代码位置使用以下代码:
import pdb; pdb.set_trace()
考虑使用以下命令通过命令行使用 pdb。
- h(help)
- d(down)
- u(up)
- b(break)
- cl(clear)
- l(list)
- n(next)
- c(continue)
- s(step)
- r(return)
- b(break)
以下是 Python 调试器 h(help) 命令的演示:
import pdb pdb.set_trace() --Call-- >d:\programdata\lib\site-packages\ipython\core\displayhook.py(247)__call__() -> def __call__(self, result = None): (Pdb) h Documented commands (type help <topic>): ======================================== EOF c d h list q rv undisplay a cl debug help ll quit s unt alias clear disable ignore longlist r source until args commands display interact n restart step up b condition down j next return tbreak w break cont enable jump p retval u whatis bt continue exit l pp run unalias where Miscellaneous help topics: ========================== exec pdb
示例
使用 Python 调试器时,我们可以使用以下几行代码在脚本中的任何位置设置断点:
import pdb; pdb.set_trace()
设置断点后,我们可以正常运行脚本。脚本将执行到某一点,直到设置断点的行。考虑以下示例,我们将使用上述几行代码在脚本中的不同位置运行脚本:
import pdb; a = "aaa" pdb.set_trace() b = "bbb" c = "ccc" final = a + b + c print (final)
运行上述脚本时,它将执行程序直到 a = “aaa”,我们可以在以下输出中检查这一点。
输出
--Return-- > <ipython-input-7-8a7d1b5cc854>(3)<module>()->None -> pdb.set_trace() (Pdb) p a 'aaa' (Pdb) p b *** NameError: name 'b' is not defined (Pdb) p c *** NameError: name 'c' is not defined
在 pdb 中使用命令 ‘p(print)’ 后,此脚本仅打印 ‘aaa’。 之后出现错误,因为我们已将断点设置到 a = "aaa"。
同样,我们可以通过更改断点来运行脚本并查看输出中的差异:
import pdb a = "aaa" b = "bbb" c = "ccc" pdb.set_trace() final = a + b + c print (final)
输出
--Return-- > <ipython-input-9-a59ef5caf723>(5)<module>()->None -> pdb.set_trace() (Pdb) p a 'aaa' (Pdb) p b 'bbb' (Pdb) p c 'ccc' (Pdb) p final *** NameError: name 'final' is not defined (Pdb) exit
在以下脚本中,我们在程序的最后一行设置断点:
import pdb a = "aaa" b = "bbb" c = "ccc" final = a + b + c pdb.set_trace() print (final)
输出如下:
--Return-- > <ipython-input-11-8019b029997d>(6)<module>()->None -> pdb.set_trace() (Pdb) p a 'aaa' (Pdb) p b 'bbb' (Pdb) p c 'ccc' (Pdb) p final 'aaabbbccc' (Pdb)
广告