2017-10-16 101 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分,所以我根本無法評論任何用戶的問題,但只能是我自己的問題。感謝您的回覆。 –