On this page
ใช้ Debugger จริง (pdb / VS Code)
เลิก debug ด้วย print อย่างเดียว — หยุดโปรแกรมแล้วเดินดู state ทีละบรรทัดด้วย debugger
เมื่อโค้ดทำงานไม่เป็นไปตามคาด มือใหม่มักโรย print() ไปทั่วแล้วลบทีหลัง แต่ debugger ให้คุณ "หยุดเวลา" ในโปรแกรมแล้วสำรวจค่าตัวแปรทุกตัวได้ทันที breakpoint เดียวมักบอกได้มากกว่า print สิบบรรทัด — เป็นทักษะที่ช่วยให้แก้บั๊กได้เร็วและตรงจุด
หัวข้อนี้ต้องลงมือ เปิดไฟล์ .py แล้วลองใส่ breakpoint() รันใน terminal และลองตั้ง breakpoint ใน VS Code — อ่านเฉย ๆ ไม่ทำให้ใช้เป็น
breakpoint() — เริ่มที่ง่ายที่สุด
ตั้งแต่ Python 3.7 แค่ใส่ breakpoint() ตรงจุดที่อยากหยุด เมื่อรันโปรแกรมจะหยุดตรงนั้นและเปิด pdb (Python debugger) ให้พิมพ์คำสั่งสำรวจ
def calculate_total(items):
total = 0
for item in items:
breakpoint() # โปรแกรมหยุดตรงนี้ทุกรอบ
total += item["price"] * item["qty"]
return total
calculate_total([{"price": 10, "qty": 2}])คำสั่ง pdb ที่ใช้บ่อย
เมื่อหยุดที่ breakpoint จะเห็น prompt (Pdb) ให้พิมพ์คำสั่งเหล่านี้สำรวจและเดินโปรแกรม
| คำสั่ง | ย่อ | ทำอะไร |
|---|---|---|
| next | n | รันบรรทัดถัดไป (ไม่เข้าไปในฟังก์ชัน) |
| step | s | รันบรรทัดถัดไป (เข้าไปในฟังก์ชัน) |
| continue | c | รันต่อจนถึง breakpoint ถัดไป |
| p ตัวแปร | แสดงค่าตัวแปร | |
| list | l | แสดงโค้ดรอบ ๆ จุดที่หยุด |
| quit | q | ออกจาก debugger |
(Pdb) p total # ดูค่า total ตอนนี้
0
(Pdb) p item # ดู item ปัจจุบัน
{'price': 10, 'qty': 2}
(Pdb) n # รันบรรทัดถัดไป
(Pdb) p total
20
(Pdb) c # รันต่อรันทั้งไฟล์ใต้ pdb
python -m pdb myscript.py
# หยุดตั้งแต่บรรทัดแรก พิมพ์ n เดินทีละบรรทัด หรือ c รันจนเจอ errorVS Code debugger (วิธีที่ใช้จริงบ่อยสุด)
ในงานจริงคนนิยม debugger แบบกราฟิกใน editor มากกว่า pdb เพราะเห็นภาพ:
- คลิกซ้ายของเลขบรรทัดเพื่อตั้ง breakpoint (จุดแดง)
- กด F5 เพื่อรันแบบ debug — โปรแกรมหยุดที่จุดแดง
- ดูค่าตัวแปรทั้งหมดในแผง Variables ทางซ้าย
- Step Over (F10) / Step Into (F11) เดินทีละบรรทัด
- ดู Call Stack ว่าตอนนี้ถูกเรียกมาจากไหน
- เลื่อนเมาส์ไปบนตัวแปรเพื่อดูค่าได้ทันที
debugger = หยุดเวลาในโปรแกรมแล้วเดินสำรวจทีละก้าว เห็นทุกตัวแปรพร้อมกัน ส่วน print = ส่องไฟฉายทีละจุด ต้องเดาก่อนว่าจะส่องตรงไหน เมื่อ bug ซับซ้อน debugger ประหยัดเวลากว่ามาก
สรุปหัวข้อนี้
- ใส่ breakpoint() เพื่อหยุดโปรแกรมแล้วเปิด pdb
- คำสั่ง pdb หลัก: n (next), s (step), c (continue), p (print), l (list), q (quit)
- รันทั้งไฟล์ใต้ debugger: python -m pdb script.py
- VS Code: คลิกตั้ง breakpoint → F5 → ดู Variables/Call Stack — นิยมสุดในงานจริง
1) ใส่ breakpoint() ในฟังก์ชันที่มี loop แล้วใช้ p ดูค่าตัวแปรแต่ละรอบ 2) ลองคำสั่ง n vs s กับโค้ดที่เรียกฟังก์ชันย่อย สังเกตความต่าง 3) ตั้ง breakpoint ใน VS Code แล้วกด F5 ดู Variables 4) เอาโค้ดที่มี bug มาหาจุดผิดด้วย debugger แทน print