在PDB(或IPDB),我們可以執行語句和計算表達式與!
or p
commands:如何在pdb中調試手動輸入的表達式和語句?
p表達
評估在當前上下文中的表達並打印它的值。[!]語句
在當前堆棧幀的上下文中執行的(單行)語句。除非語句的第一個單詞類似於調試器命令,否則感嘆號可以省略。要設置一個全局變量,你可以在同一行與全局命令前綴分配命令
因此,例如,我可以輸入p reddit.get_subreddits()
而在IPDB調試和代碼將在目前情況下執行,我會看到返回值。
有沒有一種方法可以調試這種「手動輸入」表達式的執行?
基本上我想要做的是s reddit.get_subreddits()
,但只是執行step
命令並忽略表達式。
編輯:一個簡單的例子
就拿這個簡單的功能:
import random
def get_value_for_weekday(weekday_index=None):
values = [10, 20, 20, 10, 30, 30, 30]
if not weekday_index:
# If no weekday provided, return the average of all weekdays
return sum(values)/7
return averages[weekday_index]
if __name__ == '__main__':
while True:
import ipdb; ipdb.set_trace() # enter ipbd for debug
get_value_for_weekday(random.randint(0, 7))
這是因爲if not weekday_index
(則應檢查weekday_index is not None
)
竊聽假設我注意到我獲得10
是我期待的次數的一半。所以我在調用函數之前添加了一個import ipdb; ipdb.set_trace()
來嘗試和調試代碼。
所以我在ipdb控制檯,我突然意識到,也許問題是當我傳遞0作爲weekday_index。 我可以IPDB直接測試我的假設:
ipdb> p get_value_for_weekday(0)
22
好了,我意識到有些不對勁時weekday_index=0
。
我現在想要做的是逐步調用get_value_for_weekday(0)
的調用,以便我可以看到我錯誤地進入了if塊。
很明顯,我可以退出ipdb,停止腳本,更改代碼始終傳遞0,重新啓動腳本,當我輸入ipdb時,使用ipdb step
(s
)命令調試調用。
但是,如果我可以做s get_value_for_weekday(0)
,那麼我能做到的方式就不會更容易嗎?
有沒有辦法做這樣的事情?
你能給我一個更具體的考試,我可以重現嗎?我有點難以理解你在找什麼。 –
增加了一個例子,我希望它使事情更清晰。 – LeartS