除錯執行緒應用程式
本章我們將學習如何除錯執行緒應用程式。我們還將學習除錯的重要性。
什麼是除錯?
在計算機程式設計中,除錯是查詢和移除計算機程式中錯誤、異常和問題的過程。這個過程從程式碼編寫之初就開始了,並在後續階段繼續進行,將程式碼與其他程式設計單元組合以形成軟體產品。除錯是軟體測試過程的一部分,也是整個軟體開發生命週期中不可或缺的一部分。
Python 偵錯程式
Python 偵錯程式或pdb是 Python 標準庫的一部分。它是一個查詢難以發現的錯誤的良好後備工具,允許我們快速可靠地修復有故障的程式碼。以下是pdb 偵錯程式的兩個最重要的任務:
- 它允許我們在執行時檢查變數的值。
- 我們也可以單步執行程式碼並設定斷點。
我們可以透過以下兩種方式使用 pdb:
- 透過命令列;這也被稱為事後除錯。
- 透過互動式執行 pdb。
使用 pdb
要使用 Python 偵錯程式,我們需要在想要進入偵錯程式的程式碼位置使用以下程式碼:
import pdb; pdb.set_trace()
考慮使用以下命令透過命令列使用 pdb。
- h(help)
- d(down)
- u(up)
- b(break)
- cl(clear)
- l(list)
- n(next)
- c(continue)
- s(step)
- r(return)
- b(break)
以下是 Python 偵錯程式 h(help) 命令的演示:
import pdb pdb.set_trace() --Call-- >d:\programdata\lib\site-packages\ipython\core\displayhook.py(247)__call__() -> def __call__(self, result = None): (Pdb) h Documented commands (type help <topic>): ======================================== EOF c d h list q rv undisplay a cl debug help ll quit s unt alias clear disable ignore longlist r source until args commands display interact n restart step up b condition down j next return tbreak w break cont enable jump p retval u whatis bt continue exit l pp run unalias where Miscellaneous help topics: ========================== exec pdb
示例
使用 Python 偵錯程式時,我們可以使用以下幾行程式碼在指令碼中的任何位置設定斷點:
import pdb; pdb.set_trace()
設定斷點後,我們可以正常執行指令碼。指令碼將執行到某一點,直到設定斷點的行。考慮以下示例,我們將使用上述幾行程式碼在指令碼中的不同位置執行指令碼:
import pdb; a = "aaa" pdb.set_trace() b = "bbb" c = "ccc" final = a + b + c print (final)
執行上述指令碼時,它將執行程式直到 a = “aaa”,我們可以在以下輸出中檢查這一點。
輸出
--Return-- > <ipython-input-7-8a7d1b5cc854>(3)<module>()->None -> pdb.set_trace() (Pdb) p a 'aaa' (Pdb) p b *** NameError: name 'b' is not defined (Pdb) p c *** NameError: name 'c' is not defined
在 pdb 中使用命令 ‘p(print)’ 後,此指令碼僅列印 ‘aaa’。 之後出現錯誤,因為我們已將斷點設定到 a = "aaa"。
同樣,我們可以透過更改斷點來執行指令碼並檢視輸出中的差異:
import pdb a = "aaa" b = "bbb" c = "ccc" pdb.set_trace() final = a + b + c print (final)
輸出
--Return-- > <ipython-input-9-a59ef5caf723>(5)<module>()->None -> pdb.set_trace() (Pdb) p a 'aaa' (Pdb) p b 'bbb' (Pdb) p c 'ccc' (Pdb) p final *** NameError: name 'final' is not defined (Pdb) exit
在以下指令碼中,我們在程式的最後一行設定斷點:
import pdb a = "aaa" b = "bbb" c = "ccc" final = a + b + c pdb.set_trace() print (final)
輸出如下:
--Return-- > <ipython-input-11-8019b029997d>(6)<module>()->None -> pdb.set_trace() (Pdb) p a 'aaa' (Pdb) p b 'bbb' (Pdb) p c 'ccc' (Pdb) p final 'aaabbbccc' (Pdb)
廣告