I am trying to debug a python code using pdb. I have a variable that called c and when I press c to print this variable the pdb get confused and continue debugging to the next break point. How can I avoid such confusion given that it would be very difficult to change the name of the variable.
3 Answers
You can tell pdb not to evaluate things like that using the ! prefix:
>>> !c
... <value of c>
1 Comment
(Pdb) !c = somethingTo print a variable, use p
p c
will print the value of the variable c
e.g:
>>> import pdb
>>> c = [1,2,3]
>>> pdb.set_trace()
--Return--
> <stdin>(1)<module>()->None
(Pdb) p c
[1, 2, 3]
1 Comment
print, pp, pprintYour confusion is about what the various commands in PDB do. I think of it a bit like a MUD and that works fairly often:
Use p to print out the contents of a variable (or pp to pretty-print (or handle your character's basic needs)):
(Pdb) p df
Empty DataFrame
Columns: [Dist, type, Count]
Index: []
Type where or w to see where you are on the stack:
(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")
See that little > arrow? That's where we are in the stack.
Use list or l to look around:
(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):
To move around in the stack continue MUDing and use up (u) or down (d).
Use args (a) to examine what arguments the current function was called with:
(Pdb) args
dat = array([], shape=(0, 3), dtype=float64)
dev_classes = {81, 82, 21, 22, 23, 24, 31}
Use interact to enter the code at the current point in the stack. Ctrl+D brings you back in to PDB.