調試線程應用程序
在本章中,我們將學習如何調試線程應用程序。也將學習調試的重要性。
調試是什麼?
在計算機編程中,調試是查找和消除計算機程序中的錯誤,錯誤和異常的過程。 這個過程在代碼被寫入後立即開始,並且隨着代碼與其他編程單元組合以形成軟件產品而連續進行。 調試是軟件測試過程的一部分,是整個軟件開發生命週期的一個組成部分。
Python調試器
Python調試器(也叫pdb)是Python標準庫的一部分。 這是一個很好的回退工具,用於追蹤難以發現的錯誤,並允許我們快速可靠地修復錯誤的代碼。 以下是 pdp 調試器的兩個最重要的任務 -
- 它允許在運行時檢查變量的值。
- 可以遍歷代碼並設置斷點。
我們可以通過以下兩種方式使用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
(幫助)命令演示 -
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)