Python调试技巧
18 个回答
40
如果你在使用pdb(Python的调试工具),你可以为一些常用的命令设置快捷方式。这样可以让你更方便地使用。我自己用的是这些:
# Ned's .pdbrc
# Print a dictionary, sorted. %1 is the dict, %2 is the prefix for the names.
alias p_ for k in sorted(%1.keys()): print "%s%-15s= %-80.80s" % ("%2",k,repr(%1[k]))
# Print the instance variables of a thing.
alias pi p_ %1.__dict__ %1.
# Print the instance variables of self.
alias ps pi self
# Print the locals.
alias pl p_ locals() local:
# Next and list, and step and list.
alias nl n;;l
alias sl s;;l
# Short cuts for walking up and down the stack
alias uu u;;u
alias uuu u;;u;;u
alias uuuu u;;u;;u;;u
alias uuuuu u;;u;;u;;u;;u
alias dd d;;d
alias ddd d;;d;;d
alias dddd d;;d;;d;;d
alias ddddd d;;d;;d;;d;;d
78
http://pypi.python.org/pypi/pudb 是一个全屏幕、基于控制台的 Python 调试工具。
它的目标是把现代图形界面的调试器的所有好处,放到一个更轻便、适合用键盘操作的工具里。PuDB 让你可以在写代码和测试代码的地方直接调试,也就是在终端里。如果你用过很久以前的 DOS 系统下的 Turbo Pascal 或 C 工具,PuDB 的界面可能会让你觉得很熟悉。
对于调试独立的脚本非常方便,只需要运行
python -m pudb.run my-script.py
139
你可以使用pdb这个模块,在任何地方插入pdb.set_trace()
,这样就能设置一个断点。
>>> import pdb
>>> a="a string"
>>> pdb.set_trace()
--Return--
> <stdin>(1)<module>()->None
(Pdb) p a
'a string'
(Pdb)
要继续执行程序,可以使用c
(或者cont
或continue
)。
使用pdb,你还可以执行任意的Python表达式。例如,如果你发现了错误,可以直接修改代码,然后输入一个表达式,这样在运行的代码中就能达到同样的效果。
ipdb是pdb的一个版本,专门为IPython设计。它让你在使用pdb时,能够享受到IPython的所有功能,包括自动补全。
你还可以设置pdb在遇到未捕获的异常时自动运行。
Pydb是为了增强pdb而写的版本。有什么好处呢?