0Pricing
Python Academy · Lezione

Debugging con pdb

Utilizzi il debugger integrato di Python per eseguire il codice passo passo in modo interattivo.

Debugging con pdb è una lezione Python Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Python Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Python Academy include 4 lezioni in totale.

Che cos'è pdb?

pdb è il debugger interattivo integrato di Python. Consente di mettere in pausa l'esecuzione, ispezionare le variabili e avanzare nel codice riga per riga.

import pdb

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

faulty(5)

breakpoint() — Python 3.7+

breakpoint() è una forma abbreviata integrata di import pdb; pdb.set_trace(). Rispetta la variabile d'ambiente PYTHONBREAKPOINT.

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

process([1, -2, 3])

Comandi fondamentali di pdb

Comandi essenziali: n (riga successiva), s (entra), c (continua), q (esci), p expr (stampa), l (elenca il sorgente).

# 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

Ispezionare le variabili

Utilizzi p per stampare un'espressione, pp per una stampa formattata e locals() per visualizzare tutte le variabili locali.

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

Breakpoint condizionali

Imposti breakpoint condizionali per mettere in pausa l'esecuzione solo quando una condizione è vera, evitando di avanzare ripetutamente nel codice.

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

Debug post-mortem

Esamini lo stato subito dopo un'eccezione non gestita usando pdb.post_mortem() oppure esegua lo script con 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

Osservare le variabili con w e where

w (where) stampa il traceback dello stack di chiamate corrente, così è possibile sapere come si è arrivati al frame attuale.

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

Spostarsi tra i frame

u (up) e d (down) consentono di spostarsi tra i frame dello stack di chiamate e di esaminare le variabili nelle funzioni chiamanti.

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

ipdb — Debugger avanzato

ipdb integra pdb con le funzionalità di IPython: completamento con il tabulatore, evidenziazione della sintassi e comandi magici.

# pip install ipdb
import ipdb

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

calc(7)

pudb — Debugger visuale nel terminale

pudb offre un debugger TUI a schermo intero nel terminale, con pannelli per il codice, le variabili e lo stack.

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

import pudb

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

Disabilitare i breakpoint in CI

Imposti PYTHONBREAKPOINT=0 per fare in modo che tutte le chiamate a breakpoint() non eseguano alcuna operazione in CI o in produzione.

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

Verifica rapida

Quale comando di pdb consente di continuare l'esecuzione fino al breakpoint successivo?

Riepilogo

Utilizzi breakpoint() per mettere in pausa l'esecuzione e accedere a pdb. Comandi fondamentali: n, s, c, p, q. Per un'esperienza più completa, provi ipdb o pudb. In CI, disabiliti il debugger con PYTHONBREAKPOINT=0.

Domande Frequenti

La lezione «Debugging con pdb» è gratuita?

Sì — il testo completo di «Debugging con pdb» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Python Academy, passa a CoddyKit PRO. Il corso Python Academy include 4 lezioni in totale.

Cosa imparerò in «Debugging con pdb»?

Utilizzi il debugger integrato di Python per eseguire il codice passo passo in modo interattivo. Eserciti Python Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Python Academy?

Non è richiesta alcuna esperienza precedente. Python Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.

Quanto tempo richiede la lezione «Debugging con pdb»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Python Academy?

Sì. Ogni lezione Python Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Basi del modulo logging
  2. Handler, formatter e filtri
  3. Logging strutturato
  4. Debugging con pdb
← Torna a Python Academy