分类:
2009-02-07 19:44:46
Python 调试器 Pdb
===========================
使用pdb调试器的最简单形式:
>>>import pdb
>>>pdb.run('')
调试环境下的提示符(prompt)是'(Pdb)'.当中第一次调用函数的时候,调试器将会停下进入调试状态。另一种情况,如果一个语句结束时候有一个为处理的异常,可以使用pdb的post-mortem工具来查看一些环境变量等等(?)。
>>>import pdb
>>>pdb.pm()
可以被识别的命令将在下一章列出。大部分这样的命令可以首字母缩略的形式使用,比如h(elp)就是help,可以使用h来代替。一个空行表示重复上一次键入的命令(除去list命令)。调试器无法识别的语句被认为是python语句并且在被调试的程序上下文中得到执行。
Python语句也可以以!作为前缀来进行表示和执行。这是一种非常有力的方式来窥探被调试程序的内部,甚至可以通过这种方式来改变变量的值。
当一个异常在语句中raise中的时候,异常的名字被打印出来但是条时期的状态并不会随之改变。
条时期也提供别名机制,并且可以有自己的参数,别名可以减少输入的负担。
多行命令可以通过一行来进行输入,只需要使用‘;;’进行分割即使是在一个括中的字符串中(也就是说字符串中如果有;;的话要十分小心!)。
如果 '.pdbrc' 文件在你的Home目录下或者当前目录下,Pdb将会读取他的内容并且在调试器提示符环境下执行他。对于别名机制这是非常有用的。如果当前目录和home目录下都有配置文件,则先读取home下的文件,再读取当前目录下的配置文件进行覆盖。
除了别名,调试器并不支持直接的标称,但是可以简单的继承该类而写出自己的调试器,提供你自己希望的特性。
附一些有用的调试命令
w(here) 显式当前堆栈结构。往下的是新的,就像X86构架中的那样。
d(own) 移向新的一帧
u(p) 移向旧的一帧
b(reak) [([filename:]lineno | function) [, condition] ]
如果没有指定文件名则使用当前文件
condition是一个字符串,必须等价于 true
The condition argument, if present, is a string which must
evaluate to true in order for the breakpoint to be honored.
tbreak [([filename:]lineno | function) [, condition] ]
临时的breakpoint
cl(ear) [bpnumber [bpnumber ...]]
空格进行分割,清除这些断点
disable bpnumber [bpnumber ...]
disable 断点,可以enable之后
ignore bpnumber count
设置某个断点的count,当count为0的时候断点状态为active,count不为0的时候每一次进入断点时候count自减
condition bpnumber condition
s(tep) 单步执行,步入
n(ext) 单步执行,步过函数
c(ont(inue)) 执行直到断点
l(ist) [first [,last]]
列出11行附近的代码
a(rgs)
打印出当前函数的参数
p expression
答应表达式的值
(!) statement
执行statement
whatis arg
答应 arg 的类型
q(uit)