2

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

4

3 回答 3

2

要打印变量,请使用p

p c

将打印变量的值c

例如:

>>> import pdb
>>> c = [1,2,3]
>>> pdb.set_trace()
--Return--
> <stdin>(1)<module>()->None
(Pdb) p c
[1, 2, 3]
于 2013-07-30T00:30:44.927 回答
2

你可以告诉 pdb 不要使用!前缀来评估类似的东西:

 >>> !c
 ... <value of c>
于 2013-07-30T00:28:57.503 回答
1

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

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

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

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

(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")

看到那个小>箭头了吗?这就是我们在堆栈中的位置。

使用listl环顾四周:

(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 并使用up ( u ) 或down ( d )。

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

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

使用交互在堆栈中的当前点输入代码。Ctrl+D将您带回 PDB。

于 2015-03-05T22:53:19.390 回答