時間:2023-03-17來源:系統城裝機大師作者:佚名
ipdb是用來python中用以交互式debug的模塊,可以直接利用pip安裝;
其功能類似于pycharm中 python控制臺,
而使用ipdb 的優點,便是直接在代碼中調試,
避免了在python控制臺,或者重新設置一些簡單變量。
1 | pip install ipdb |
當程序運行到ipdb.set_trace()的地方會自動進入debug模式。
1 2 3 |
for i in range ( 5 ): print (i) ipdb.set_trace() |
n→ \to→next
ENTER→ \to→重復上次命令
q→ \to→退出
p<變量>→ \to→打印變量
c→ \to→繼續
l→ \to→查找當前位于哪里
s→ \to→進入子程序
r→ \to→運行直到子程序結束
————————————————
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
命令式 上面的方法很方便,但是也有不靈活的缺點。對于一段比較棘手的代碼,我們可能需要按步執行,邊運行邊跟蹤代碼流并進行調試,這時候使用交互式的命令式調試方法更加有效。啟動IPDB調試環境的方法也很簡單: python -m ipdb your_code.py 常用命令 IPDB調試環境提供的常見命令有: 幫助 使用h即可調出IPDB的幫助??梢允褂胔elp command的方法查詢特定命令的具體用法。 下一條語句 使用n(next)執行下一條語句。注意一個函數調用也是一個語句。如何能夠實現類似“進入函數內部”的功能呢? 進入函數內部 使用s(step into)進入函數調用的內部。 打斷點 使用b line_number(break)的方式給指定的行號位置加上斷點。使用b file_name:line_number的方法給指定的文件(還沒執行到的代碼可能在外部文件中)中指定行號位置打上斷點。 另外,打斷點還支持指定條件下進入,可以查詢幫助文檔。 一直執行直到遇到下一個斷點 使用c(continue)執行代碼直到遇到某個斷點或程序執行完畢。 一直執行直到返回 使用r(return)執行代碼直到當前所在的這個函數返回。 跳過某段代碼 使用j line_number(jump)可以跳過某段代碼,直接執行指定行號所在的代碼。 更多上下文 在IPDB調試環境中,默認只顯示當前執行的代碼行,以及其上下各一行的代碼。如果想要看到更多的上下文代碼,可以使用l first[, second](list)命令。 其中first指示向上最多顯示的行號,second指示向下最多顯示的行號(可以省略)。當second小于first時,second指的是從first開始的向下的行數(相對值vs絕對值)。 根據SO上的這個問題,你還可以修改IPDB的源碼,一勞永逸地改變上下文的行數。 我在哪里 調試興起,可能你會忘了自己目前所在的行號。例如在打印了若干變量值后,屏幕完全被這些值占據。使用w或者where可以打印出目前所在的行號位置以及上下文信息。 這是啥 我們可以使用whatis variable_name的方法,查看變量的類別(感覺有點雞肋,用type也可以辦到)。 列出當前函數的全部參數 當你身處一個函數內部的時候,可以使用a(argument)打印出傳入函數的所有參數的值。 打印 使用p(print)和pp(pretty print)可以打印表達式的值。 清除斷點 使用cl或者clear file:line_number清除斷點。如果沒有參數,則清除所有斷點。 再來一次 使用restart重新啟動調試器,斷點等信息都會保留。restart實際是run的別名,使用run args的方式傳入參數。 退出 使用q退出調試,并清除所有信息。 當然,這并不是IPDB的全部。其他的命令還請參照幫助文檔。文檔在手,天下我有! |
到此這篇關于python調試模塊ipdb詳解的文章就介紹到這了
2023-03-17
python flask項目打包成docker鏡像發布的過程2023-03-17
python使用openai生成圖像的超詳細教程2023-03-15
pyhon如何把程序打包為whlpython cron定時任務觸發接口自動化巡檢 apscheduler報錯:Run time of job …… next run at: ……)” was missed by misfire_grace_time參數 找到任務超時的根本原因...
2023-03-15