การแก้จุดบกพร่องด้วย pdb
ใช้เครื่องมือแก้จุดบกพร่องในตัวของ Python เพื่อไล่ดูโค้ดแบบโต้ตอบ
การแก้จุดบกพร่องด้วย pdb เป็นบทเรียน Python Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Python Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Python Academy มีบทเรียนทั้งหมด 4 บทเรียน
pdb คืออะไร
pdb เป็นตัวแก้ไขข้อผิดพลาดแบบโต้ตอบในตัวของ Python ช่วยให้คุณหยุดการทำงาน ตรวจสอบตัวแปร และไล่ดูโค้ดทีละบรรทัดได้
import pdb
def faulty(n):
result = n * 2
pdb.set_trace() # execution pauses here
return result + 1
faulty(5)breakpoint() — Python 3.7 ขึ้นไป
breakpoint() เป็นรูปแบบย่อในตัวสำหรับ import pdb; pdb.set_trace() และเคารพค่าตัวแปรสภาพแวดล้อม PYTHONBREAKPOINT
def process(data):
for item in data:
if item < 0:
breakpoint() # drop into pdb here
print(item)
process([1, -2, 3])คำสั่งหลักของ pdb
คำสั่งสำคัญ ได้แก่ n (บรรทัดถัดไป), s (ก้าวเข้าไป), c (ทำงานต่อ), q (ออก), p expr (พิมพ์ผลลัพธ์) และ l (แสดงซอร์ส)
# Inside pdb prompt:
# (Pdb) n — execute next line
# (Pdb) s — step into function
# (Pdb) c — continue to next breakpoint
# (Pdb) p my_var — print value
# (Pdb) l — show source around current line
# (Pdb) q — quitการตรวจสอบตัวแปร
ใช้ p เพื่อพิมพ์นิพจน์ ใช้ pp เพื่อพิมพ์อย่างสวยงาม และใช้ locals() เพื่อดูตัวแปรภายในทั้งหมด
# (Pdb) p data
# [1, -2, 3]
# (Pdb) pp {"key": "value", "num": 42}
# {'key': 'value',
# 'num': 42}
# (Pdb) p locals()จุดหยุดแบบมีเงื่อนไข
ตั้งจุดหยุดแบบมีเงื่อนไขเพื่อหยุดการทำงานเฉพาะเมื่อเงื่อนไขเป็นจริง ช่วยหลีกเลี่ยงการก้าวดูโค้ดซ้ำ ๆ
import pdb
def process(items):
for i, item in enumerate(items):
if item < 0: # manual condition
pdb.set_trace()
result = item * 2
# Or inside pdb: b filename.py:12, x < 0การแก้ไขข้อผิดพลาดหลังการล้มเหลว
ตรวจสอบสถานะทันทีหลังเกิดข้อยกเว้นที่ไม่ได้จัดการ โดยใช้ pdb.post_mortem() หรือเรียกใช้สคริปต์ด้วย python -m pdb script.py
import pdb
try:
1 / 0
except ZeroDivisionError:
pdb.post_mortem() # inspect at the crash point
# Or from CLI:
# python -m pdb my_script.pyการดูตัวแปรด้วย w และ where
w (where) จะแสดงร่องรอยสแตกการเรียกปัจจุบัน เพื่อให้ทราบว่ามาถึงเฟรมปัจจุบันได้อย่างไร
# (Pdb) w
# /app/main.py(10)main()
# -> process([1,-2,3])
# /app/main.py(5)process()
# -> breakpoint()การเลื่อนไประหว่างเฟรม
u (up) และ d (down) ใช้เลื่อนไประหว่างเฟรมของสแตกการเรียก เพื่อให้ตรวจสอบตัวแปรในฟังก์ชันที่เรียกใช้ได้
# (Pdb) u — move to calling frame
# (Pdb) d — move back down
# (Pdb) p data — inspect variable in that frameipdb — ดีบักเกอร์ขั้นสูง
ipdb ห่อหุ้ม pdb ด้วยฟีเจอร์ของ IPython ได้แก่ การเติมคำด้วยแท็บ การเน้นไวยากรณ์ และคำสั่งพิเศษ
# pip install ipdb
import ipdb
def calc(x):
ipdb.set_trace()
return x ** 2
calc(7)pudb — ดีบักเกอร์เทอร์มินัลแบบภาพ
pudb มีดีบักเกอร์ TUI แบบเต็มหน้าจอในเทอร์มินัล พร้อมแผงโค้ด ตัวแปร และสแตก
# pip install pudb
# python -m pudb my_script.py
import pudb
def run():
pudb.set_trace()
data = [1, 2, 3]
return sum(data)การปิดใช้งานจุดพักใน CI
ตั้งค่า PYTHONBREAKPOINT=0 เพื่อให้การเรียก breakpoint() ทั้งหมดไม่มีการทำงานใน CI หรือระบบจริง
# In CI pipeline:
# export PYTHONBREAKPOINT=0
# python my_script.py
# breakpoint() is silently skippedตรวจสอบอย่างรวดเร็ว
คำสั่งใดของ pdb ที่ใช้ทำงานต่อจนถึงจุดพักถัดไป
สรุปทบทวน
ใช้ breakpoint() เพื่อหยุดการทำงานชั่วคราวและเข้าสู่ pdb คำสั่งหลัก ได้แก่ n, s, c, p และ q หากต้องการประสบการณ์ที่หลากหลายขึ้น ให้ลองใช้ ipdb หรือ pudb และปิดใช้งานด้วย PYTHONBREAKPOINT=0 ใน CI
คำถามที่พบบ่อย
บทเรียน “การแก้จุดบกพร่องด้วย pdb” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การแก้จุดบกพร่องด้วย pdb” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Python Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Python Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การแก้จุดบกพร่องด้วย pdb”
ใช้เครื่องมือแก้จุดบกพร่องในตัวของ Python เพื่อไล่ดูโค้ดแบบโต้ตอบ คุณปฏิบัติ Python Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Python Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Python Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “การแก้จุดบกพร่องด้วย pdb” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Python Academy นี้ได้ไหม
ได้ บทเรียน Python Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- พื้นฐานโมดูล logging
- ตัวจัดการ ตัวจัดรูปแบบ และตัวกรอง
- การบันทึกแบบมีโครงสร้าง
- การแก้จุดบกพร่องด้วย pdb