我正在尝试使用 pdb 调试 python 代码。我有一个名为 c 的变量,当我按 c 打印此变量时,pdb 会感到困惑并继续调试到下一个断点。鉴于更改变量的名称非常困难,我该如何避免这种混淆。
问问题
527 次
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: []
键入where或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")
看到那个小>
箭头了吗?这就是我们在堆栈中的位置。
使用list或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 并使用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 回答