0Pricing
Python Academy · Lesson

Debugging with pdb

Use Python's built-in debugger to step through code interactively.

Debugging with pdb is a free Python Academy lesson on CoddyKit — lesson 4 of 4. You can read the complete lesson below for free — then practise it hands-on in the browser with a built-in code editor and a 24/7 AI tutor. It is part of the Python Academy learning path, one of 4 lessons in the course, and your progress syncs across the web and the CoddyKit app.

What Is pdb?

pdb is Python's built-in interactive debugger. It lets you pause execution, inspect variables, and step through code line by line.

import pdb

def faulty(n):
    result = n * 2
    pdb.set_trace()   # execution pauses here
    return result + 1

faulty(5)

breakpoint() — Python 3.7+

breakpoint() is a built-in shorthand for import pdb; pdb.set_trace(). It respects the PYTHONBREAKPOINT env var.

def process(data):
    for item in data:
        if item < 0:
            breakpoint()   # drop into pdb here
        print(item)

process([1, -2, 3])

Core pdb Commands

Essential commands: n (next line), s (step into), c (continue), q (quit), p expr (print), l (list source).

# 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

Inspecting Variables

Use p to print an expression, pp for pretty-print, and locals() to see all local variables.

# (Pdb) p data
# [1, -2, 3]
# (Pdb) pp {"key": "value", "num": 42}
# {'key': 'value',
#  'num': 42}
# (Pdb) p locals()

Conditional Breakpoints

Set conditional breakpoints to pause only when a condition is true, avoiding repeated stepping.

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

Post-Mortem Debugging

Inspect the state right after an unhandled exception using pdb.post_mortem() or run your script with 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

Watching Variables with w and where

w (where) prints the current call stack traceback so you know how you got to the current frame.

# (Pdb) w
# /app/main.py(10)main()
# -> process([1,-2,3])
# /app/main.py(5)process()
# -> breakpoint()

Moving Between Frames

u (up) and d (down) move between call stack frames so you can inspect variables in calling functions.

# (Pdb) u   — move to calling frame
# (Pdb) d   — move back down
# (Pdb) p data   — inspect variable in that frame

ipdb — Enhanced Debugger

ipdb wraps pdb with IPython features: tab completion, syntax highlighting, and magic commands.

# pip install ipdb
import ipdb

def calc(x):
    ipdb.set_trace()
    return x ** 2

calc(7)

pudb — Visual Terminal Debugger

pudb provides a full-screen TUI debugger in the terminal with code, variable, and stack panels.

# pip install pudb
# python -m pudb my_script.py

import pudb

def run():
    pudb.set_trace()
    data = [1, 2, 3]
    return sum(data)

Disabling Breakpoints in CI

Set PYTHONBREAKPOINT=0 to make all breakpoint() calls no-ops in CI or production.

# In CI pipeline:
# export PYTHONBREAKPOINT=0
# python my_script.py
# breakpoint() is silently skipped

Quick Check

What pdb command continues execution until the next breakpoint?

Recap

Use breakpoint() to pause execution and drop into pdb. Core commands: n, s, c, p, q. For richer experiences, try ipdb or pudb. Disable with PYTHONBREAKPOINT=0 in CI.

Frequently asked questions

Is the “Debugging with pdb” lesson free?

Yes — the full text of “Debugging with pdb” is free to read here on the web, and the Python Academy course includes 4 lessons in total. To practise it interactively (a built-in code editor and a 24/7 AI tutor) and unlock the rest of the Python Academy course, upgrade to CoddyKit PRO.

What will I learn in “Debugging with pdb”?

Use Python's built-in debugger to step through code interactively. You practise Python Academy with hands-on code you run directly in the browser, and a 24/7 AI tutor answers your questions as you work through the lesson.

Do I need any experience to start Python Academy?

No prior experience is required. Python Academy on CoddyKit is structured for beginners through advanced learners; this is — lesson 4 of 4, so you can start here or from the beginning and move at your own pace.

How long does the “Debugging with pdb” lesson take?

Most CoddyKit lessons take about 5–10 minutes. Each one is bite-sized and interactive, so you make steady progress and pick up exactly where you left off across the web and the app.

Can I write and run code in this Python Academy lesson?

Yes. Every Python Academy lesson includes a built-in code editor, so you write and run real code right in your browser and get instant AI feedback — no local setup required.

All lessons in this course

  1. The logging Module Basics
  2. Handlers, Formatters, and Filters
  3. Structured Logging
  4. Debugging with pdb
← Back to Python Academy