Python 必備 debug 神器 pdb

2021-09-23 20:39:45 字數 3703 閱讀 6308

使用介紹

如何新增斷點?

說到 debug,肯定是要新增斷點的,這裡有兩種方式新增斷點:

在想要斷點**後新增 一行

pdb.set_trace()

若是使用這種方式,直接執行 python 檔案即可進入斷點除錯。

用命令列來新增斷點

b line_number

若是使用這種方式,需要 python -m pdb ***.py 來啟動斷點除錯。

常用命令

先簡單介紹一下使用命令,這裡不用記住,等用到的時候回來查就行。

1 進入命令列debug模式,python -m pdb ***.py

2 h:(help)幫助

3 w:(where)列印當前執行堆疊

4 d:(down)執行跳轉到在當前堆疊的深一層(個人沒覺得有什麼用處)

6 b:(break)新增斷點

b 列出當前所有斷點,和斷點執行到統計次數

b line_no:當前指令碼的line_no行新增斷點

b filename:line_no:指令碼filename的line_no行新增斷點

b function:在函式function的第一條可執行語句處新增斷點

7 tbreak:(temporary break)臨時斷點

8 cl:(clear)清除斷點

cl 清除所有斷點

cl bpnumber1 bpnumber2... 清除斷點號為bpnumber1,bpnumber2...的斷點

cl lineno 清除當前指令碼lineno行的斷點

cl filename:line_no 清除指令碼filename的line_no行的斷點

9 disable:停用斷點,引數為bpnumber,和cl的區別是,斷點依然存在,只是不啟用

10 enable:啟用斷點,引數為bpnumber

如果本句是函式呼叫,則s會執行到函式的第一句

如果本句是函式呼叫,則執行函式,接著執行當前執行語句的下一條。

13 r:(return)執行當前執行函式到結束

15 l:(list)列出原始碼

l 列出當前執行語句周圍11條**

l first 列出first行周圍11條**

l first second 列出first--second範圍的**,如果second16 a:(args)列出當前執行函式的函式

17 p expression:(print)輸出expression的值

18 pp expression:好看一點的p expression

19 run:重新啟動debug,相當於restart

20 q:(quit)退出debug

21 j lineno:(jump)設定下條執行的語句函式

只能在堆疊的最底層跳轉,向後重新執行,向前可直接執行到行號

23)condition bpnumber conditon,給斷點設定條件,當引數condition返回true的時候bpnumber斷點有效,否則bpnumber斷點無效

舉個簡單的栗子

為了驗證一下 pdb 的用法,我寫了個簡單的 python **,如下:

(pdb) l  注釋: l(list)列出當前**

7          urls =

8     

9          def start_url(self, urls):

10              pdb.set_trace()

11              for url in urls:

12  ->                print(url)

14     

15          def parse(self):

16              pdb.set_trace()

17              for url in self.urls:

> d:\work_test\test\pdb_test\pdb_test.py(17)parse()

-> for url in self.urls:

> d:\work_test\test\pdb_test\pdb_test.py(18)parse()

-> result = self.request_something(url)

(pdb) l 注釋: l(list)列出當前**

14     

15          def parse(self):

16              pdb.set_trace()

17              for url in self.urls:

18  ->                result = self.request_something(url)

19     

20          def request_something(self, url):

21              print('requesting...')

22              data = '''

23     

(pdb) s 注釋: s(step)這裡是進入 request_something() 函式的意思

--call--

> d:\work_test\test\pdb_test\pdb_test.py(20)request_something()

-> def request_something(self, url):

> d:\work_test\test\pdb_test\pdb_test.py(21)request_something()

-> print('requesting...')

(pdb) l 注釋: l(list)列出當前**

16              pdb.set_trace()

17              for url in self.urls:

18                  result = self.request_something(url)

19     

20          def request_something(self, url):

21  ->            print('requesting...')

22              data = '''

23     

24\n\n\n\n'

(pdb) q  注釋:q(quit)退出

總結

按照上面的例子一套下來,基本的用法就可以學會了,關鍵還是得自己多實踐,今天就寫到這,還想寫一篇關於效能除錯的文章,不知道這兩天有沒有時間了

Mac必備開發神器

下面介紹幾款mac下必備開發神器 iterm2 zsh ohmyzsh zsh autosuggestion homebrew alfred。iterm2是iterm的替代品,也是iterm的繼承者。它適用於使用macos 10.10或更高版本的mac。iterm2將iterm帶入了您從未想過的功能...

產品經理必備神器推薦

donet技術分享平台 閱讀原文 工欲善其事,必先利其器,作為最追求極致體驗的產品經理群體,手裡有一件趁手的法器,工作起來才會有一種享受般的快感,最近回答或邂逅了很多關於產品經理工具的問題,碰巧平日工作生活中,個人的一大愛好就是去體驗把玩各種各樣的產品,所以今天就來統一彙總一下,聊聊產品經理的工具箱...

windows必備軟體神器

centbrowser是最像google chrome的瀏覽器。更新速度也非常快基本上核心只慢chrome乙個版本。既然cent是最像chrome的瀏覽器,何不直接使用chrome呢,這是因為chrome作為乙個外來物,有些操作不太符合國人習慣,比如 在點選書籤時,會預設替換掉當前頁面,而大多數國內...