2011-06-10 33 views
47

pdbnext指令不會超越列表解析,而是逐步執行每次迭代。有沒有一種方法可以讓它們在列表理解後的下一行繼續調試?如何跳過Python調試器(pdb)中的列表理解?

我不得不求助於列出代碼,在下一行設置一個斷點,然後繼續執行到下一個斷點。這很煩人,我覺得必須有更好的方法。

回答

59

您可以使用until命令。在pdbhelp until輸出:

UNT(IL)
繼續執行,直到與許多比目前 一個達到或更大的線,直到當前幀返回

0

在闡述斯文的答覆因爲我最近不得不向最近的同事描述untilnext。這是不特定的列表理解是stuck旁邊,但對於一般的循環:

until命令就像next,不同之處在於它明確繼續執行,直到達到同樣的功能用線一個高於當前值的行號。

,這意味着你可以在循環步驟與until

只是爲了掩飾的完整性stepnext

step命令用於執行當前行,然後停止在下一個執行點

這意味着它將按指令進行指令。注意連接;的instrucitons將作爲一條指令處理。

var A=0; var B=0 #Note: that will count as one instruction 

下一個命令是相同的步驟,但不進入功能,從正在執行的語句調用。實際上,它在一次操作中一直通過函數調用到當前函數中的下一個語句。

next幫助跳過多個指令,在多個變量定義的函數中,它將跳過所有指令。

下面是一個說明的場景的一個示例:

實施例:pdb_until。PY

aVar = 3 
x = [i for i in range(0,30)] 
bVar = 5 

與PDB運行此:

python -m pdb pdb_until.py 

啓動我們的互動環節:

> pdb_until.py(1)<module>() 
-> aVar = 3 
(Pdb) step    #our Input, we step 
> pdb_until.py(2)<module>() 
-> x = [i for i in range(0,10)] 
(Pdb) next    #our Input, next 
> pdb_until.py(2)<module>() 
-> x = [i for i in range(0,10)] 
(Pdb) next    #our Input, we are now stuck on line 2 
> pdb_until.py(2)<module>() 
-> x = [i for i in range(0,10)] 
(Pdb) until    #our Input, until steps over (runs list comp) 

來源:Python標準庫的例子,道格·海爾曼