我常用的 Python 除錯工具
以下是我做除錯或分析時用過的工具的一個概覽。如果你知道有更好的工具,請在評論中留言,可以不用很完整的介紹。
日誌
沒錯,就是日誌。再多強調在你的應用裡保留足量的日誌的重要性也不為過。你應當對重要的內容打日誌。如果你的日誌打的足夠好的話,單看日誌你就能發現問題所在。那樣可以節省你大量的時間。
如果一直以來你都在程式碼裡亂用 print 語句,馬上停下來。換用logging.debug。以後你還可以繼續複用,或是全部停用等等。
跟蹤
有時更好的辦法是看執行了哪些語句。你可以使用一些IDE的偵錯程式的單步執行,但你需要明確知道你在找那些語句,否則整個過程會進行地非常緩慢。
標準庫裡面的trace模組,可以列印執行時包含在其中的模組裡所有執行到的語句。(就像製作一份專案
1 | python-mtrace–trace script.py |
這會產生大量輸出(執行到的每一行都會被打印出來,你可能想要用grep過濾那些你感興趣的模組).
比如:
1 | python-mtrace–trace script.py|egrep'^(mod1.py|mod2.py)' |
偵錯程式
以下是如今應該人盡皆知的一個基礎介紹:
Python12 | importpdbpdb.set_trace()# 開啟pdb提示 |
或者
12345 | try:(一段丟擲異常的程式碼)except:import pdbpdb.pm()# 或者 pdb.post_mortem() |
或者(輸入 c 開始執行指令碼)
Shell1 | python-mpdb script.py |
在輸入-計算-輸出迴圈(注:REPL,READ-EVAL-PRINT-LOOP的縮寫)環境下,可以有如下操作:
- c or continue
- q or quit
- l or list, 顯示當前步幀的原始碼
- w or where,回溯呼叫過程
- d or down, 後退一步幀(注:相當於回滾)
- u or up, 前進一步幀
- (回車), 重複上一條指令
其餘的幾乎全部指令(還有很少的其他一些命令除外),在當前步幀上當作python程式碼進行解析。
如果你覺得挑戰性還不夠的話,可以試下smiley,-它可以給你展示那些變數而且你能使用它來遠端追蹤程式。
更好的偵錯程式
pdb的直接替代者:
ipdb(easy_install ipdb) – 類似ipython(有自動完成,顯示顏色等)
pudb(easy_install pudb) – 基於curses(類似圖形介面介面),特別適合瀏覽原始碼
遠端偵錯程式
安裝方式:
Shell1 | sudo apt-getinstall winpdb |
用下面的方式取代以前的pdb.set_trace():
Python12 | importrpdb2rpdb2.start_embedded_debugger("secretpassword") |
現在執行winpdb,檔案-關聯
不喜歡Winpdb?也可以直接包裝PDB在TCP之上執行!
這樣做:
Python123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 | importlogggingclassRdb(pdb.Pdb):""" This will run pdb as a ephemeral telnet service. Once you connect no one else can connect. On construction this object will block execution till a client has connected. Based on https://github.com/tamentis/rpdb I think ... To use this:: Rdb(4444).set_trace() Then run: telnet 127.0.0.1 4444 """def__init__(self,port=0):self.old_stdout=sys.stdoutself.old_stdin=sys.stdinself.listen_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)self.listen_socket.bind(('0.0.0.0',port))ifnotport:logging.critical("PDB remote session open on: %s",self.listen_socket.getsockname())print>>sys.__stderr__,"PDB remote session open on:",self.listen_socket.getsockname()sys.stderr.flush()self.listen_socket.listen(1)self.connected_socket,address=self.listen_socket.accept()self.handle=self.connected_socket.makefile('rw')pdb.Pdb.__init__(self,completekey='tab',stdin=self.handle,stdout=self.handle)sys.stdout=sys.stdin=self.handledefdo_continue(self,arg):sys.stdout=self.old_stdoutsys.stdin=self.old_stdinself.handle.close()self.connected_socket.close()self.listen_socket.close()self.set_continue()return1do_c=do_cont=do_continuedefset_trace():""" Opens a remote PDB on first available port. """rdb=Rdb()rdb.set_trace() |
只想要一個REPL環境?試試IPython如何?
如果你不需要一個完整齊全的偵錯程式,那就只需要用一下的方式啟動一個IPython即可:
12 | importIPythonIPython.embed() |
標準linux工具
我常常驚訝於它們竟然遠未被充分利用。你能用這些工具解決很大範圍內的問題:從效能問題(太多的系統呼叫,記憶體分配等等)到死鎖,網路問題,磁碟問題等等。
其中最有用的是最直接的strace,只需要執行 sudo strace -p 12345 或者 strace -f 指令(-f 即同時追蹤fork出來的子程序),這就行了。輸出一般會非常大,所以你可能想要把它重定向到一個檔案以便作更多的分析(只需要加上 &> 檔名)。
再就是ltrace,有點類似strace,不同的是,它輸出的是庫函式呼叫。引數大體相同。
還有lsof 用來指出你在ltrace/strace中看到的控制代碼數值的意義。比如:
Shell1 | lsof-p12345 |
更好的跟蹤
使用簡單而可以做很多事情-人人都該裝上htop!
Shell12 | sudo apt-getinstall htopsudo htop |
現在找到那些你想要的程序,再輸入:
Shell123 | s-代表系統呼叫過程(類似strace)L-代表庫呼叫過程(類似ltrace)l-代表lsof |
監控
沒 有好的持續的伺服器監控,但是如果你曾遇到一些很詭異的情況,諸如為什麼一切都執行的那麼慢,那些系統資源都幹什麼去了,。。。等這些問題,想弄明白卻又 無處下手之際,不必動用iotop、iftop、htop、iostat、vmstat這些工具,就用dstat吧!它可以做之前我們提過的大部分工作可 以做的事情,而且也許可以做的更好!
它會用一種緊湊的,程式碼高亮的方式(不同於iostat,vmstat)向你持續展示資料,你還經常可以看到過去的資料(不同於iftop、iostop、htop)。
只需執行:
Shell1 | dstat--cpu--io--mem--net--load--fs--vm--disk-util--disk-tps--freespace--swap--top-io--top-bio-adv |
很可能有一種更簡短的方式來寫上面這條命令,
這是一個相當複雜而又強大的工具,但是這裡我只提到了一些基本的內容(安裝以及基礎的命令)
Shell12 | sudo apt-getinstall gdb python-dbgzcat/usr/share/doc/python2.7/gdbinit.gz>~/.gdbinit |
用python2.7-dbg 執行程式:
Shell1 | sudo gdb-p12345 |
現在使用:
C123 | bt-堆疊跟蹤(C級別)pystack-python堆疊跟蹤,不幸的是你需要有~/.gdbinit並且使用python-dbgc-繼續 |
發生段錯誤?用faulthandler !
python 3.3版本以後新增的一個很棒的功能,可以向後移植到python2.x版本。只需要執行下面的語句,你就可以大抵知道什麼原因引起來段錯誤。
Python12 | importfaulthandlerfaulthandler.enable() |
記憶體洩露
嗯,這種情況下有很多的工具可以使用,其中有一些專門針對WSGI的程式比如Dozer,但是我最喜歡的當然是objgraph。使用簡單方便,讓人驚訝!
它沒有整合WSGI或者其他,所以你需要自己去發現執行程式碼的方法,像下面這樣:
123 | import objgraphobjs=objgraph.by_type("Request")[:15]objgraph.show_backrefs(objs,max_depth=20,highlight=lambdav:vinobjs, |
123 | filename="/tmp/graph.png")Graph written to/tmp/objgraph-zbdM4z.dot(107nodes)Image generated as/tmp/graph.png |
你會得到像這樣一張
以下是我做除錯或分析時用過的工具的一個概覽。如果你知道有更好的工具,請在評論中留言,可以不用很完整的介紹。
日誌
沒錯,就是日誌。再多強調在你的應用裡保留足量的日誌的重要性也不為過。你應當對重要的內容打日誌。如果你的日誌打的足夠好的話,單看日誌你就能發現問題所在。那
本文列出了使用python進行爬蟲時所需的常用庫和工具的安裝過程,基本上只有幾行命令列的功夫就可以搞定,還是十分簡單的。
一、UrlLib 與 Re
這兩個庫是python的內建庫,若系統中已經成功安裝了python的話,這兩個庫一般是沒有什麼問題的。
驗證
開啟命令列,進入 新增斷點
指定函式:b func_name指定行號:b line_num指定斷點編號處發生中斷的條件:condition 2 a==7表示在斷點2處出現a==7時,產生中斷
刪除斷點
刪除斷點只能根據編號進行刪除,如刪除1號斷點:cl 1
檢視斷點
b
執行程式碼
單步跟蹤,不進入函式:n單步跟
程式碼規範化能提高程式碼的可讀性和優美程度,下面推薦一個自動化規範程式碼工具,配置簡單高效。
當前環境:Win10+pycharm+python3.6
安裝
以管理員身份執行cmd,輸入:
pip install autopep8
在pycharm中配置
File-
誰還沒暗戀過哪個妹子啊!當然那些暗戀的妹子應該稱做為女生,今天就教大家一個簡單的算是爬蟲的案例吧!主要實現的功能就是:監控女神的 QQ空間,一旦女神釋出新的說說,你的郵箱馬上就會收到說說內容,是不是想了解一下
先看看程式碼執行效果圖:
Python學習群865597862
(Ⅰ)Python四個常用庫
1.
numpy:(Numeric Python 開源的
數值計算擴充套件。可用來儲存和處理大型矩陣)
一個用python實現的
科學計算包。
包括:1、一個強大的N維陣列物件Array;2、比較成熟的(廣播)函式庫;3、用於整合C/C++和Fortra
某天晚上,下了班回到家,無意中找到以前用的溫度感測器DHT22,如下圖,
然後在電腦搜了下,還好,有程式,STM32的,可以跑下,可是跑了後發現程式不穩定。
然後就把讀出來的5個數據(兩個位元組溼度+兩個位元組溫度+一個位元組效驗位)跟計算出來的效驗位通
編譯程式時需要加上-g,之後才能用gdb進行除錯:gcc -g main.c -o main
gdb中命令:
回車鍵:重複上一命令
(gdb)help:檢視命令幫助,具體命令查詢在gdb中輸入help + 命令,簡寫h
(gdb)run:重新開始執行檔案(run-text:載入文字檔
一些關於串列埠的知識
什麼是串列埠
串列埠是計算機上一種非常通用裝置通訊的協議,不要與通用序列匯流排Universal Serial Bus(USB)混淆。大多數計算機包含兩個基於RS232的串列埠。串列埠同時也是儀器儀表裝置通用的通訊協議;很多GP
本文介紹Linux/Android一些常用的除錯工具及其使用說明,作為備忘,持續更新中。
注意:大部分都不是本人原創,是從各地方蒐集而來,原作者也未一一追溯,所以沒有出處說明,如有冒犯,請評論或私信,我會盡快修改。
FIQ-Debugger
fiq debugger是整
目前有許多免費的串列埠除錯工具,比較常用的有:
1、友善串列埠除錯助手(v3.8.5)
優點:
1)使用方便,超級穩定,不宕機,不丟包;
2)串列埠自動識別,支援COM9以上串列埠;
3)支援多串列埠除錯;
4)支援歷史傳送記錄;
5)廣泛支援各種
Elements
chrome devtools 中 Elements panel 是審查 dom 元素和 css 的, 可以實時修改 dom/css.
windows: ctrl + shift + imac: cmd + opt + iDOM修改 html &
最近在Linux環境下做C語言專案,由於是在一個原有專案基礎之上進行二次開發,而且專案工程龐大複雜,出現了不少問題,其中遇到最多、花費時間最長的問題就是著名的“段錯誤”(Segmentation Fault)。藉此機會系統學習了一下,這裡對Linux環境下的段錯誤做個小結,方便以後同類問題的排查與解決。
1
最近學習了一些網路測試方面的東西,先做個小結,也算給自己理清一下思路。
1. 網路相關測什麼?
From internet: 網路效能五項指標:Availability, Response time, networkutilization, network throughp
使用 pdb 進行除錯
pdb 是 python 自帶的一個包,為 python 程式提供了一種互動的原始碼除錯功能,主要特性包括設定斷點、單步除錯、進入函式除錯、檢視當前程式碼、檢視棧片段、動態改變變數的值等。pdb 提供了一些常用的除錯命令
參考連結
目錄
前言
步驟:
總結:
前言
android比較常用的資料庫框架分別是:greendao、ormlite、realm,對於這三種資料庫的優缺點,既然你要使用了,就說明你有一定的瞭解,在這裡就不介紹了!如果需要可自行google搜尋即可。接下來
Fiddle配置android代理
在wifi的同一個區域網環境的windows主機中安裝fiddler,並且啟動,如本次192.168.3.14
在android手機端配置代理為該主機
還有一種方式通過wireshark抓手機的包通過wireshark抓包
配置手提
最近在做python+web開發,採用的是cig模式。但是偶爾會出現請求失敗的情況,具體來說就是使用者在開啟新的頁面的時候,python與後臺server的通訊會卡在某個地方,具體的原因一直搞不清楚,所以想利用python的相關除錯工具來解決這個問題。但是p 這些年,我一直在使用 JavaScript 、CocosCreator 做開發,只要是他們不能解決的,我都不太願意去弄,或者說是不太情願去做。真的是手中有把錘子,看什麼都是釘子,越是熟悉一樣東西,越容易被**思維定式**給束縛,難以成長!
前段時間,我在嘗試學習 Python,想用來做點什麼,一直沒想好。我 over cti 步驟 response headers 服務器 登錄 chm format 背景是這樣的:這個組的測試人員每跑一個case都要上傳測試結果附件到QC。每個待測功能模塊可能包含幾十上百的case。於是手工上傳測試結果變成了繁重的體力勞動。令人驚訝的是我們的工 相關推薦
我常用的 Python 除錯工具
Windows環境下python爬蟲常用庫和工具的安裝(UrlLib、Re、Requests、Selenium、lxml、Beautiful Soup、PyQuery 、PyMySQL等等)
python程式碼除錯工具~pdb
人生苦短,我用python(提升效率篇)——自動化規範程式碼工具autopep8
日常用Python來監控女神的QQ空間!就算她把我遮蔽了,也無法阻止我!
Python常用庫與工具
使用python編寫工具處理DHT22驅動除錯資訊
gdb除錯工具常用命令
我的Android NDK之旅(四),android串列埠通訊-mac+串列埠除錯工具
[HOWTO]: Linux/Android常用除錯工具
常用串列埠除錯工具比較
開發人員必備除錯工具,chrome除錯工具常用功能整理
Linux除錯工具strace和gdb常用命令小結-轉
我常用的網路測試工具
python在Ubuntu系統下的除錯工具pdb
Chrome:inspect檢視android資料庫常用的幾種配置方法、chrome://inspect除錯工具離線包
android常用除錯工具fiddle、wireshark和android studio的配置
關於的python+web開發的除錯工具
我用 Python 擼了一個 plist 圖集拆圖工具!附上github原始碼
python小工具:用python操作HP的Quality Center