使用pdb调试Python

时间:2013-07-30 00:27:07

标签: python python-2.7 pdb

我正在尝试使用pdb调试python代码。我有一个名为c的变量,当我按c打印这个变量时,pdb会混淆并继续调试到下一个断点。如果更改变量的名称将非常困难,我怎么能避免这种混淆。

3 个答案:

答案 0 :(得分:2)

您可以告诉pdb不使用!前缀评估类似的内容:

 >>> !c
 ... <value of c>

答案 1 :(得分:2)

要打印变量,请使用p

p c

将打印变量c

的值

e.g:

>>> import pdb
>>> c = [1,2,3]
>>> pdb.set_trace()
--Return--
> <stdin>(1)<module>()->None
(Pdb) p c
[1, 2, 3]

答案 2 :(得分:1)

您的困惑是关于PDB中的各种命令。我认为它有点像MUD并且经常运作:

使用 p 打印出变量的内容(或 pp 以漂亮打印(或处理角色的基本需求)):

(Pdb) p df
Empty DataFrame
Columns: [Dist, type, Count]
Index: []

键入其中 w 以查看您在堆栈中的位置:

(Pdb) w
-> return df[df['type']=='dev'][['Dist','Count']].as_matrix()
  /home/user/core/ops.py(603)wrapper()
-> res = na_op(values, other)
> /home/user/core/ops.py(567)na_op()
-> raise TypeError("invalid type comparison")

看到那个小>箭头?这就是我们在筹码中的位置。

使用列表 l 环顾四周:

(Pdb) list
564               try:
565                   result = getattr(x, name)(y)
566                   if result is NotImplemented:
567  >>                     raise TypeError("invalid type comparison")
568               except (AttributeError):
569  ->                 result = op(x, y)
570   
571           return result
572   
573       def wrapper(self, other):
574           if isinstance(other, pd.Series):

要在堆栈中移动,请继续MUDing并使用向上 u )或向下 d

使用 args a )来检查调用当前函数的参数:

(Pdb) args
dat = array([], shape=(0, 3), dtype=float64)
dev_classes = {81, 82, 21, 22, 23, 24, 31}

使用交互在堆栈中的当前位置输入代码。 Ctrl + D 会让您重新回到PDB。