0Pricing
Python Academy · บทเรียน

การแก้จุดบกพร่องด้วย 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 frame

ipdb — ดีบักเกอร์ขั้นสูง

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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. พื้นฐานโมดูล logging
  2. ตัวจัดการ ตัวจัดรูปแบบ และตัวกรอง
  3. การบันทึกแบบมีโครงสร้าง
  4. การแก้จุดบกพร่องด้วย pdb
← กลับไปที่ Python Academy