一、调试模块
要调试模块,可以使用Python的pdb模块。以下是如何在模块中使用pdb的示例:
>>> import pdb
>>> import mymodule
>>> pdb.run('mymodule.test()')
> (0)?()
(Pdb) continue
> (1)?()
(Pdb) continue
NameError: 'spam'
> (1)?()
(Pdb) 二、调试脚本
要调试脚本,可以使用Python的pdb模块启动调试器。以下是如何在脚本中使用pdb的示例:
python3 -m pdb myscript.py
三、代码中打堆栈(3.7版本内置了该功能)
立即学习“Python免费学习笔记(深入)”;
在代码中设置断点并进入调试模式,可以使用以下命令:
import pdb;pdb.set_trace()
四、查看crashed program
如果程序崩溃,可以使用pdb查看崩溃时的堆栈信息。以下是如何在崩溃后使用pdb的示例:
>>> import pdb >>> import mymodule >>> mymodule.test() Traceback (most recent call last): File "", line 1, in File "./mymodule.py", line 4, in test test2() File "./mymodule.py", line 3, in test2 print(spam) NameError: spam >>> pdb.pm() > ./mymodule.py(3)test2() -> print(spam) (Pdb)
五、主要函数

六、实现自定义功能可以修改pdb.Pdb类
可以通过修改pdb.Pdb类来实现自定义调试功能。例如,要跳过特定模块,可以这样做:
import pdb; pdb.Pdb(skip=['django.*']).set_trace()
七、调试命令
以下是pdb调试器中常用的命令:
- h(elp) [command]:显示帮助信息或特定命令的帮助信息。
- w(here):打印堆栈跟踪,最近的帧在底部。箭头指示当前帧。
- d(own) [count]:将当前帧向下移动count级(默认为1级),进入较新的帧。
- u(p)[count]:将当前帧向上移动count级(默认为1级),进入较旧的帧。
- b(reak) [([filename:]lineno | function) [, condition]]:设置断点。
- tbreak [([filename:]lineno | function) [, condition]]:设置临时断点。
- cl(ear) [filename:lineno | bpnumber ...]:清除断点。
- disable [bpnumber ...]:禁用断点。
- enable [bpnumber ...]:启用断点。
- ignore bpnumber [count]:设置断点的忽略计数。
- condition bpnumber [condition]:为断点设置条件。
- commands [bpnumber]:为断点指定命令列表。
- s(tep):执行当前行,在第一次可能的场合停止。
- n(ext):继续执行直到当前函数的下一行或返回。
- unt(il) [lineno]:继续执行直到达到当前行号之后的行。
- r(eturn):继续执行直到当前函数返回。
- c(ont(inue)):继续执行,仅在遇到断点时停止。
- j(ump) lineno:设置将要执行的下一行。
- l(ist) [first[, last]]:列出当前文件的源代码。
- ll | longlist:列出当前函数或帧的所有源代码。
- a(rgs):打印当前函数的参数列表。
- p expression:在当前上下文中评估表达式并打印其值。
- pp expression:与p命令类似,但使用pprint模块进行美观打印。
- whatis expression:打印表达式的类型。
- source expression:尝试获取给定对象的源代码并显示。
- display [expression]:每次在当前帧中停止执行时显示表达式的值。
- undisplay [expression]:不在当前帧中显示表达式。
- interact:启动一个交互式解释器。
- alias [name [command]]:创建一个名为name的别名,执行command。
- unalias name:删除指定的别名。
- ! statement:在当前堆栈帧的上下文中执行语句。
- run [args ...]:重新启动调试的Python程序。
- restart [args ...]:restart是run的别名。
- q(uit):退出调试器,终止正在执行的程序。
- debug code:进入递归调试器,逐步执行代码参数。
- retval:打印函数最后一次返回的返回值。











