使用介紹
如何新增斷點?
說到 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作為乙個外來物,有些操作不太符合國人習慣,比如 在點選書籤時,會預設替換掉當前頁面,而大多數國內...