在本章中,我們將學(xué)習(xí)如何調(diào)試線程應(yīng)用程序。我們還將了解調(diào)試的重要性。
什么是調(diào)試?
在計(jì)算機(jī)編程中,調(diào)試是從計(jì)算機(jī)程序中查找和刪除錯(cuò)誤,錯(cuò)誤和異常的過程。一旦代碼被編寫就開始該過程,并且隨著代碼與其他編程單元組合以形成軟件產(chǎn)品,該過程在連續(xù)階段中繼續(xù)。調(diào)試是軟件測(cè)試過程的一部分,是整個(gè)軟件開發(fā)生命周期中不可或缺的一部分。
python調(diào)試器
python調(diào)試器或 pdb 是python標(biāo)準(zhǔn)庫(kù)的一部分。它是一個(gè)很好的后備工具,用于跟蹤難以發(fā)現(xiàn)的錯(cuò)誤,并允許我們快速可靠地修復(fù)錯(cuò)誤的代碼。以下是 pdp 調(diào)試器的兩個(gè)最重要的任務(wù)
- 它允許我們?cè)谶\(yùn)行時(shí)檢查變量的值。
- 我們也可以單步執(zhí)行代碼并設(shè)置斷點(diǎn)。
我們可以通過以下兩種方式使用pdb
- 通過命令行; 這也稱為事后調(diào)試。
- 通過交互式運(yùn)行pdb。
使用pdb
要使用python調(diào)試器,我們需要在我們想要進(jìn)入調(diào)試器的位置使用以下代碼
import pdb; pdb.set_trace()
請(qǐng)考慮以下命令以通過命令行使用pdb。
- h(help)
- d(down)
- u(up)
- b(break)
- cl(clear)
- l(list))
- n(next))
- c(continue)
- s(step)
- r(return))
- b(break)
以下是python調(diào)試器的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 ): ======================================== 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調(diào)試器時(shí),我們可以使用以下行在腳本中的任何位置設(shè)置斷點(diǎn)
import pdb; pdb.set_trace()
設(shè)置斷點(diǎn)后,我們可以正常運(yùn)行腳本。腳本將執(zhí)行到某一點(diǎn); 直到設(shè)置了一條線。考慮以下示例,我們將在腳本中的不同位置使用上述行來運(yùn)行腳本
import pdb; a = "aaa" pdb.set_trace() b = "bbb" c = "ccc" final = a + b + c print (final)
當(dāng)運(yùn)行上面的腳本時(shí),它將執(zhí)行程序直到a =“aaa”,我們可以在下面的輸出中檢查它。
輸出
--return-- > (3)()->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'。之后是錯(cuò)誤,因?yàn)槲覀円褜帱c(diǎn)設(shè)置為a =“aaa”。
同樣,我們可以通過更改斷點(diǎn)來運(yùn)行腳本并查看輸出中的差異
import pdb a = "aaa" b = "bbb" c = "ccc" pdb.set_trace() final = a + b + c print (final)
輸出
--return-- > (5)()->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
在下面的腳本中,我們?cè)诔绦虻淖詈笠恍性O(shè)置斷點(diǎn)
import pdb a = "aaa" b = "bbb" c = "ccc" final = a + b + c pdb.set_trace() print (final)
輸出如下
--return-- > (6)()->none -> pdb.set_trace() (pdb) p a 'aaa' (pdb) p b 'bbb' (pdb) p c 'ccc' (pdb) p final 'aaabbbccc' (pdb)