全網(wǎng)超實(shí)用的Debug調(diào)試技巧匯總
一、思考
1、什么是debug
● 找茬
◆ 找軟件的茬
◆ 發(fā)現(xiàn)程序的缺陷
2、為什么需要debug?

● 誰都不敢保證,寫的代碼沒有任何問題
● 高效查找軟件異常
● 一位優(yōu)秀的開發(fā)工程師
◆ 20%的時間寫代碼
◆ 80%的時間用來排錯
“不會debug” == “不會代碼” == “低工資”
3、debug需要具備哪些功能?
● 控制程序的執(zhí)行
◆ 想停則停,想執(zhí)行則執(zhí)行
◆ 隨心所欲
● 設(shè)置斷點(diǎn)
◆ 在指定位置停止
● 查看當(dāng)前命名空間(程序棧)中變量
二、Python中的Debug大法
案例代碼如下所示:
創(chuàng)建deubg_skills_demo.py文件



創(chuàng)建gifts.py文件

1、Pdb操作

● 系統(tǒng)自帶的debug工具(無需安裝)
● 將以下代碼放在需要調(diào)試的地方(類似于設(shè)置斷點(diǎn))

● 當(dāng)程序執(zhí)行到上述代碼所在位置時,會自動開啟一個console終端
◆ "->"是接下來要執(zhí)行的代碼(當(dāng)前還未執(zhí)行)

● 可以在終端運(yùn)行的命令
◆ list或者l
◆ 顯示當(dāng)前運(yùn)行的代碼
◆ 默認(rèn)列出11行代碼

● p變量名或者p需要運(yùn)行的表達(dá)式
◆ 打印變量的值

● step或者s
◆ 如果在函數(shù)調(diào)用處執(zhí)行,則會進(jìn)入函數(shù)體內(nèi)部


● next或者n
◆如果在函數(shù)調(diào)用處執(zhí)行,則不會進(jìn)入函數(shù)體內(nèi)部

● enter
◆ 重復(fù)執(zhí)行上一次的命令
● b(reak) [ ([filename:]lineno | function) [, condition] ]
◆ 設(shè)置斷點(diǎn)
◆ filename可選,如果不傳,默認(rèn)在當(dāng)前文件設(shè)置斷點(diǎn)


● c或者continue
◆ 繼續(xù)往下運(yùn)行,在下一個斷點(diǎn)處停下來

● disable斷點(diǎn)編號
◆ 禁用斷點(diǎn)

● enable斷點(diǎn)編號
◆ 啟用斷點(diǎn)
● cl或者clear 斷點(diǎn)編號
◆ 清除斷點(diǎn)

● display或者undisplay 變量
◆ 監(jiān)聽或者不監(jiān)聽某個變量
◆ 如果變量值改變,會自動顯示

● h或者h(yuǎn)elp
◆ 幫助信息

● h具體命令
◆ 具體命令的幫助文檔
● h pdb
◆ pdb的完整文檔
三、Pycharm debug操作

1、打開Python Prompt

會出現(xiàn)一個ipython的控制臺
● 可在控制臺查看當(dāng)前命名空間中的變量
● 也可執(zhí)行Python表達(dá)式

2、Step Over/F8
● 按調(diào)試工具欄中的

● 類似于pdb中的next
● 程序不會進(jìn)入到函數(shù)體內(nèi)部
3、Step Into/F7
● 按調(diào)試工具欄中的

● 類似于pdb中的step
● 程序會進(jìn)入到函數(shù)(方法)體內(nèi)部、系統(tǒng)源碼、第三方模塊源碼中
4、Step Out/Shift+F8
● 從函數(shù)體內(nèi)部跳出

5、Step Into My Code
Step Into My Code / ALT+Shift+F7
● 按調(diào)試工具欄中的

● 主要關(guān)注自己寫的代碼
● 從系統(tǒng)源碼、第三方模塊源碼中跳到自己寫的代碼中
6、Evaluate Expression

● 在當(dāng)前命名空間內(nèi)計(jì)算表達(dá)式的值
7、Quick Evaluate Expression
● 快速計(jì)算表達(dá)式的值


8、Watching

● 類似于pdb中的display
● 可以監(jiān)聽某個變量或者表達(dá)式的值
四、總結(jié)

● 作為代碼編寫者,掌握代碼的調(diào)試技巧是必備的
● 能提升工作效率,提高代碼質(zhì)量
● Python中Debug調(diào)試工具和技巧非常多
● 最常用、最實(shí)用的知識點(diǎn),本文均有覆蓋