2017-10-16 100 views
1

pdb的display命令似乎只在分配整个变量时才显示表达式。python3 pdb显示列表

pass 
foo = [1, 2, 3] 
foo[0] = 8 
foo.append(7) 
pass 

python3 -m pdb bar.py运行上述代码时,然后输入我display foo得到的输出是:

> bar.py(2)<module>() 
-> foo = [1, 2, 3] 
(Pdb) display foo 
display foo: ** raised NameError: name 'foo' is not defined ** 
(Pdb) n 
> bar.py(3)<module>() 
-> foo[0] = 8 
display foo: [1, 2, 3] [old: ** raised NameError: name 'foo' is not defined **] 
(Pdb) 
> bar.py(4)<module>() 
-> foo.append(7) 
(Pdb) 
> bar.py(5)<module>() 
-> pass 
(Pdb) foo 
[8, 2, 3, 7] 
(Pdb) 

的NameError和显示器的第一输出的预期。 然而,看起来显示不出现foo更改时,其第一项改变或当我们附加7.

有没有办法告诉pdb列出这些更改? 看来,display str(foo)做的工作,但我想知道是否有更好的解决方案。

回答

0

是的,跟踪这些更改的方法是改为'p'命令。看到这个例子

> /home/maksim/Projects/Python/basic/test.py(2)<module>() 
-> foo = [1, 2, 3] 
(Pdb) s;;l;;p foo 
> /home/maksim/Projects/Python/basic/test.py(3)<module>() 
-> foo[0] = 8 
    1  pass 
    2  foo = [1, 2, 3] 
    3 -> foo[0] = 8 
    4  foo.append(7) 
    5  pass 
    6  
    7  
    8  
[EOF] 
[1, 2, 3] 
(Pdb) s;;l;;p foo 
> /home/maksim/Projects/Python/basic/test.py(4)<module>() 
-> foo.append(7) 
    1  pass 
    2  foo = [1, 2, 3] 
    3  foo[0] = 8 
    4 -> foo.append(7) 
    5  pass 
    6  
    7  
    8  
[EOF] 
[8, 2, 3] 
(Pdb) s;;l;;p foo 
> /home/maksim/Projects/Python/basic/test.py(5)<module>() 
-> pass 
    1  pass 
    2  foo = [1, 2, 3] 
    3  foo[0] = 8 
    4  foo.append(7) 
    5 -> pass 
    6  
    7  
    8  
[EOF] 
[8, 2, 3, 7] 
(Pdb) s;;l;;p foo 
--Return-- 
> /home/maksim/Projects/Python/basic/test.py(5)<module>()->None 
-> pass 
    1  pass 
    2  foo = [1, 2, 3] 
    3  foo[0] = 8 
    4  foo.append(7) 
    5 -> pass 
    6  
    7  
    8  
[EOF] 
[8, 2, 3, 7] 
(Pdb) 
+0

感谢您的评论,但它并没有完全回答我的问题。打印会打印foo的内容,即使它没有改变,我也不想这么做。 – jbl

+0

哦,我明白了......是的,你说的没错。如果有更好的东西出现,我会发表评论。对于回复而不是评论 - 我的声誉现在只有18分,所以我根本无法评论任何用户的问题,但只能是我自己的问题。感谢您的回复。 –