ในศัพท์แสงในการพัฒนาซอฟต์แวร์ คำว่า 'การดีบัก' เป็นที่นิยมใช้ในการประมวลผลตำแหน่งและแก้ไขข้อผิดพลาดในโปรแกรม ไลบรารีมาตรฐานของ Python มีโมดูล pdb ซึ่งเป็นชุดยูทิลิตี้สำหรับการดีบักโปรแกรม Python
ฟังก์ชันการดีบักถูกกำหนดในคลาส Pdb โมดูลภายในใช้โมดูล bdb และ cmd
โมดูล pdb มีอินเทอร์เฟซบรรทัดคำสั่งที่สะดวกมาก มันถูกนำเข้าในเวลาที่รันสคริปต์ Python โดยใช้ –m switch
python –m pdb script.py
เพื่อหาข้อมูลเพิ่มเติมเกี่ยวกับวิธีการทำงานของดีบักเกอร์ อันดับแรกให้เราเขียนโมดูล Python (fact.py) ดังนี้ −
def fact(x):
f = 1
for i in range(1,x+1):
print (i)
f = f * i
return f
if __name__=="__main__":
print ("factorial of 3=",fact(3)) เริ่มการดีบักโมดูลนี้จากบรรทัดคำสั่ง ในกรณีนี้ การดำเนินการหยุดที่บรรทัดแรกในโค้ดโดยแสดงลูกศร (->) ทางด้านซ้าย และสร้างข้อความแจ้งดีบักเกอร์ (Pdb)
C:\python36>python -m pdb fact.py > c:\python36\fact.py(1)<module>() -> def fact(x): (Pdb)
หากต้องการดูรายการคำสั่งดีบักเกอร์ทั้งหมด ให้พิมพ์ 'help' หน้าพรอมต์ของดีบักเกอร์ หากต้องการทราบข้อมูลเพิ่มเติมเกี่ยวกับคำสั่งใดๆ ให้ใช้ไวยากรณ์ 'help

คำสั่ง list แสดงรายการโค้ดทั้งหมดที่มี -> สัญลักษณ์ทางด้านซ้ายของบรรทัดที่โปรแกรมหยุดทำงาน
(Pdb) list
1 -> def fact(x):
2 f = 1
3 for i in range(1,x+1):
4 print (i)
5 f = f * i
6 return f
7 if __name__=="__main__":
8 print ("factorial of 3 = ", fact(3)) หากต้องการเลื่อนผ่านโปรแกรมทีละบรรทัด ให้ใช้ step หรือคำสั่งถัดไป
(Pdb) step
> c:\python36\fact.py(7)<module>()
-> if __name__=="__main__":
(Pdb) next
> c:\python36\fact.py(8)<module>()
-> print ("factorial of 3 = ", fact(3))
(Pdb) next
1
2
3
factorial of 3= 6
--Return--
> c:\python36\fact.py(8)<module>()->None
-> print ("factorial of 3 = ", fact(3)) ความแตกต่างที่สำคัญระหว่างคำสั่งขั้นตอนและคำสั่งถัดไปคือคำสั่งขั้นตอนนั้นจะทำให้โปรแกรมหยุดภายในฟังก์ชันในขณะที่คำสั่งถัดไปเรียกใช้ฟังก์ชันที่เรียกและหยุดหลังจากนั้น
C:\python36>python -m pdb fact.py
> c:\python36\fact.py(1)<module>()
-> def fact(x):
(Pdb) s
> c:\python36\fact.py(7)<module>()
-> if __name__=="__main__":
(Pdb) n
> c:\python36\fact.py(8)<module>()
-> print ("factorial of 3=",fact(3))
(Pdb) s
--Call--
> c:\python36\fact.py(1)fact()
-> def fact(x):
(Pdb) n
> c:\python36\fact.py(2)fact()
-> f = 1
(Pdb) n
> c:\python36\fact.py(3)fact()
-> for i in range(1,x+1):
(Pdb) n
> c:\python36\fact.py(4)fact()
-> print (i)
(Pdb) n
1
> c:\python36\fact.py(5)fact()
-> f = f * i
(Pdb) n
> c:\python36\fact.py(3)fact()
-> for i in range(1, x + 1):
(Pdb) n
> c:\python36\fact.py(4)fact()
-> print (i)
(Pdb) f,i
(1, 2)
(Pdb) คำสั่งขั้นตอนยังแสดง --call—บ่งชี้เมื่อโปรแกรมพบการเรียกใช้ฟังก์ชันและ --return--- เมื่อฟังก์ชันสิ้นสุด เราสามารถตรวจสอบค่าของตัวแปรบางตัวได้ตลอดเวลาโดยป้อนชื่อตัวแปร
คุณสามารถตั้งค่าเบรกพอยต์ภายในโปรแกรมได้ด้วยคำสั่ง break ต้องระบุหมายเลขบรรทัด (ซึ่งควรตั้งค่าเบรกพอยต์) ตัวอย่างเช่น 'break 5' จะตั้งค่าเบรกพอยต์ที่บรรทัดที่ 5 ของโปรแกรมปัจจุบัน
(Pdb) list
2 f = 1
3 for i in range(1, x + 1):
4 print (i)
5 f = f * i
6 return f
7 -> if __name__=="__main__":
8 print ("factorial of 3=",fact(3))
[EOF]
(Pdb) break 5
Breakpoint 1 at c:\python36\fact.py:5
(Pdb) continue
1
> c:\python36\fact.py(5)fact()
-> f = f * i
(Pdb) break
Num Type Disp Enb Where
1 breakpoint keep yes at c:\python36\fact.py:5
breakpoint already hit 1 time
(Pdb) continue
2
> c:\python36\fact.py(5)fact()
-> f = f * i
(Pdb) b
Num Type Disp Enb Where
1 breakpoint keep yes at c:\python36\fact.py:5
breakpoint already hit 2 times เมื่อมีการออกคำสั่ง 'continue' การทำงานของโปรแกรมจะดำเนินการจนกว่าจะพบเบรกพอยต์ หากต้องการแสดงจุดสั่งหยุดทั้งหมด ให้ใช้คำสั่งตัวแบ่งปัญหาอย่างง่ายโดยไม่ต้องมีหมายเลขบรรทัด
เบรกพอยต์ใด ๆ สามารถปิดใช้งาน/เปิดใช้งานได้โดยปิดใช้งาน/เปิดใช้งานคำสั่ง หรือล้างทั้งหมดด้วยคำสั่งที่ชัดเจน
(Pdb) disable 1 Disabled breakpoint 1 at c:\python36\fact.py:5 (Pdb) b Num Type Disp Enb Where 1 breakpoint keep no at c:\python36\fact.py:5 breakpoint already hit 2 times
ดีบักเกอร์ Pdb สามารถใช้จากภายในสคริปต์ Python ได้เช่นกัน ในการดำเนินการดังกล่าว ให้นำเข้า pdb ที่ด้านบนของสคริปต์และใช้วิธี set_trace() ภายในโปรแกรม
import pdb
def fact(x):
f = 1
for i in range(1,x+1):
pdb.set_trace()
print (i)
f = f * i
return f
if __name__=="__main__":
print ("factorial of 3=",fact(3)) การทำงานของดีบักเกอร์จะเหมือนกับที่เราพบในสภาพแวดล้อมของบรรทัดคำสั่ง