如何debug函数_如何使用 pdb 来性感 debug 你的 Python 代码?
當(dāng)你的代碼寫(xiě)得多了,你總會(huì)出現(xiàn)這樣或者那樣的錯(cuò)誤,有時(shí)候代碼突然可以用,有時(shí)候代碼又突然傻逼,有時(shí)候你只是離開(kāi)一會(huì),它就自動(dòng)好了…就像女生的心思,總是讓人捉摸不透,總是那么的魔幻。
今天,小帥b來(lái)跟你說(shuō)說(shuō) debug ,其實(shí) debug 還是挺重要的,它除了可以幫助你自己發(fā)現(xiàn)代碼自身的 bug 之外,你還可以通過(guò) debug 清楚的知道代碼的執(zhí)行流程,比如變量是怎么賦值的,數(shù)據(jù)是如何改變的等等,你都可以通過(guò) debug 手段清楚的看到這些玩意的變化。
除此之外,當(dāng)你在學(xué)習(xí)一個(gè)新的庫(kù)或者新的代碼特性的時(shí)候,debug 也是常用的學(xué)習(xí)手段,因?yàn)槟憧梢酝ㄟ^(guò)它更容易理解代碼為什么是那樣寫(xiě)的。
接下來(lái)我會(huì)跟你說(shuō)說(shuō) Python 內(nèi)置的 debug 工具 pdb 的使用。
我們先來(lái)看看這樣的例子:
很簡(jiǎn)單,這里我們定義了個(gè)方法,然后傳遞參數(shù) name 返回一個(gè)字符串。
不過(guò)你可以看到第二行調(diào)了一個(gè) breakpoint 方法,這是打斷點(diǎn)的意思,它是 Python 內(nèi)置的,直接調(diào)用即可,接著我們來(lái)運(yùn)行一下這個(gè) py:
這時(shí)候可以看到:
第一行:> 后面告訴我們打斷點(diǎn)的位置
第二行:-> 就是此刻 Python 執(zhí)行到的暫停位置(因?yàn)槲覀冊(cè)诖饲按蛄藬帱c(diǎn)了)
第三行:(pdb):意思是說(shuō)我們可以使用 pdb 這個(gè)工具的相關(guān)命令了。
如果你不知道如何使用 pdb 的調(diào)試命令,可以輸入 help 得到相關(guān)的幫助:
在這里我跟你說(shuō)下 pdb 常常會(huì)用到的幾個(gè)命令的意思:
1、p + 參數(shù) :查看參數(shù)的值
2、n :單步跳過(guò)
3、s :單步進(jìn)入
4、c :繼續(xù)執(zhí)行
5、w :顯示上下文信息
6、a :查看函數(shù)的參數(shù)列表
7、ll : 列出當(dāng)前的源碼
8、b : 設(shè)置斷點(diǎn)
9、q : 退出 debug
比如現(xiàn)在我們想知道參數(shù) name 的值是什么,我們就可以這樣:
顯示參數(shù):
顯示上下文信息:
執(zhí)行當(dāng)前代碼(單步進(jìn)入):
繼續(xù)執(zhí)行:
在 debug 的過(guò)程中,你還可以修改參數(shù)的值,比如把 name 直接改成 sb:
列出當(dāng)前的源碼:
我剛給你演示的這些是在 Python3.8 版本下執(zhí)行的,如果你用的是 Python 3.7 以下的版本,是用不了 breakpoint 這個(gè)函數(shù)的:
所以如果想要在 Python3.7 以下的版本使用 pdb ,那么你就需要自行導(dǎo)入了,并且你要打斷點(diǎn)的話(huà)應(yīng)該調(diào)用的是 set_trace():
那么這個(gè)時(shí)候,你就可以在 Python3.7 以下的版本使用 pdb 了:
當(dāng)然,你還可以什么斷點(diǎn)都不設(shè)置,使用命令的方式執(zhí)行 pdb ,比如我們把剛剛的斷點(diǎn)都去掉:
接著我們通過(guò) pdb 命令來(lái)執(zhí)行它:
python3 -m pdb xxx.py
這時(shí)候可以看到,它是直接從第一行開(kāi)始打斷點(diǎn):
哦對(duì)了,如果你使用 VIM 編輯器的話(huà),可以使用 repl 插件結(jié)合 ipdb 實(shí)現(xiàn)調(diào)試,像我這樣:
ok,以上,希望對(duì)你有幫助,我們下回見(jiàn),peace!
總結(jié)
以上是生活随笔為你收集整理的如何debug函数_如何使用 pdb 来性感 debug 你的 Python 代码?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 西部慢调电影海报精选
- 下一篇: python input函数赋值法_大佬