全網最實用的 Debug調試技巧匯總-Python大佬偷偷使用的神技
- 2019 年 10 月 3 日
- 筆記
一、思考❓❔
1.什麼是debug?
- 找茬
- 找軟件的茬
- 發現程序的缺陷
2.為什麼需要debug?
- 誰都不敢保證,寫的代碼沒有任何問題
- 高效查找軟件異常
- 一位優秀的開發工程師
- 20%的時間寫代碼
- 80%的時間用來排錯
- 「不會debug」 == 「不會代碼」 == 「低工資」
3.debug工具需要具備哪些功能?
- 控制程序的執行
- 想停則停,想執行則執行
- 隨心所欲
- 設置斷點
- 在指定位置停止
- 查看當前命名空間(程序棧)中變量
二、Python中的Debug大法?
案例代碼如下所示:
創建deubg_skills_demo.py文件
import time from DebugSkills.gifts import send_gift def say_love(name, talk): print(f"{name}: {talk}!") print(show(3)) print(f"{send_gift()}, 能代表我的心!") def show(num): print(f"{'轟隆' * num}!") print(f"{'⚡' * num}") return "還敢再發誓嗎?" def long_long_ago(name, talk): # breakpoint() print("nlong long ago...") print("當初沒被雷劈死的原因既然是愛錯了那個她/他") print(f"{name}: {talk}!") print(show(4)) print(f"{send_gift()}, 能代表我的心!") if __name__ == '__main__': lover = input("請輸入你愛的人: ") love_talk = input("請輸入愛的箴言: ") # 方法一: # import pdb # pdb.set_trace() # 方法二: # breakpoint() breakpoint() say_love(lover, love_talk) time.sleep(5) lover = input("n請輸入你愛的人: ") love_talk = input("請輸入愛的箴言: ") long_long_ago(lover, love_talk)
創建gifts.py文件
import random gifts = ["99朵玫瑰", "鑽戒", "馬爾代夫三十日游", "北京二環內的一套廁所", "瑪莎拉蒂車鑰匙", "免費單車司機"] def send_gift(): """ 送禮物 :return: """ one_gift = random.choice(gifts) return one_gift
1.pdb操作 (^_-)-☆
-
系統自帶的debug工具(無需安裝)
-
將以下代碼放在需要調試的地方(類似於設置斷點)
# 通用方法 import pdb; pdb.set_trace() # Python3.6以上版本 breakpoint()
-
當程序執行到上述代碼所在位置時,會自動開啟一個console終端
- "->"是接下來要執行的代碼(當前還未執行)
-
可以在終端運行的命令
-
list或者l
- 顯示當前運行的代碼
- 默認列出11行代碼
-
p 變量名 或者 p 需要運行的表達式
- 打印變量的值
-
step或者s
- 如果在函數調用處執行,則會進入函數體內部
-
-
next或者n
- 如果在函數調用處執行,則不會進入函數體內部
-
enter
- 重複執行上一次的命令
-
b(reak) [ ([filename:]lineno | function) [, condition] ]
- 設置斷點
- filename可選,如果不傳,默認在當前文件設置斷點
-
c或者continue
- 繼續往下運行,在下一個斷點處停下來
-
disable 斷點編號
-
禁用斷點
-
-
enable 斷點編號
- 啟用斷點
-
cl或者clear 斷點編號
- 清除斷點
-
display或者undisplay 變量
- 監聽或者不監聽某個變量
-
如果變量值改變,會自動顯示
-
h或者help
-
幫助信息
-
- h 具體命令
- 具體命令的幫助文檔
- h pdb
- pdb的完整文檔
三、Pycharm debug操作??
1.打開Python Prompt
會出現一個ipython的控制台
- 可在控制台查看當前命名空間中的變量
- 也可執行Python表達式
2.Step Over / F8
-
按調試工具欄中的
- 類似於pdb中的next
-
程序不會進入到函數體內部
3.Step Into / F7
-
按調試工具欄中的
- 類似於pdb中的step
-
程序會進入到函數(方法)體內部、系統源碼、第三方模塊源碼中
4.Step Out / Shift+F8
-
從函數體內部跳出
5.Step Into My Code / ALT+Shift+F7
-
按調試工具欄中的
- 主要關注自己寫的代碼
-
從系統源碼、第三方模塊源碼中跳到自己寫的代碼中
6.Evaluate Expression
- 在當前命名空間內計算表達式的值
7.Quick Evaluate Expression
- 快速計算表達式的值
8.Watching
- 類似於pdb中的display
- 可以監聽某個變量或者表達式的值
四、總結??
- 作為代碼編寫者,掌握代碼的調試技巧是必備的
- 能提升工作效率,提高代碼質量
- Python中Debug調試工具和技巧非常多
- 最常用、最實用的知識點,本文均有覆蓋