全網最實用的 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調試工具和技巧非常多
  • 最常用、最實用的知識點,本文均有覆蓋