Python Python

Cum putem face debugging în Python cu pdb

Dima Июл 22, 2026 10,0

Debugger-ul pdb (Python Debugger) este o unealtă puternică și ușor de utilizat pentru depanarea codului Python. Acesta permite programatorilor să execute codul pas cu pas, să examineze valorile variabilelor și să identifice erorile de logică în programul nostru. În acest tutorial, vom explora caracteristicile principale ale pdb și vom demonstra utilizarea sa cu exemple practice.


Ce este pdb?

pdb este debugger-ul standard inclus în Python. Cu el, poți să:

  • Pui puncte de întrerupere (breakpoints) în cod.
  • Rulezi codul pas cu pas.
  • Examinezi sau modifici valorile variabilelor în timpul execuției.
  • Analizezi fluxul de execuție pentru a găsi erori.

Cum se pornește pdb?

Adăugam direct în cod un breakpoint (punct de întrerupere):

import pdb
pdb.set_trace()

sau

from pdb import set_trace as bp
bp()


Apelăm script-ul Python cu debugger-ul din linia de comandă:

python3 -m pdb script.py



Comenzi Esențiale în pdb

Iată o listă de comenzi frecvent utilizate în pdb:

Comandă Descriere
l Listează codul din jurul poziției curente.
n Execută următoarea linie de cod.
s Intră într-o funcție (dacă este apelată).
c Continuă execuția până la următorul breakpoint.
p var Afișează valoarea variabilei var.
q Oprește debugger-ul și închide programul.
b Setează un breakpoint pe o anumită linie.
cl Șterge toate breakpoints.
h sau ? Afișează ajutorul pentru comenzi.

Exemplu Practic: Debugging cu pdb

Haideți să explorăm un program simplu care calculează factorialul unui număr, dar care conține o eroare.

def factorial(num):
    if num == 0:
        return 1
    return num * factorial(num)

def main():
    number = 5
    result = factorial(number)
    print(f"Factorialul lui {number} este {result}")

if __name__ == "__main__":
    main()


Rularea acestui cod va genera următoarea eroare:

Ceea ce înseamnă că acest cod intră în buclă infinită din cauza unei erori logice.


Adaugă un punct de întrerupere

Folosim set_trace() pentru a întrerupe execuția înainte de a intra in functia care calculează factorialul:

from pdb import set_trace as bp
def factorial(num):
    if num == 0:
        return 1
    return num * factorial(num)

def main():
    number = 5
    bp() # punctul in care executia va fi oprita
    result = factorial(number)
    print(f"Factorialul lui {number} este {result}")

if __name__ == "__main__":
    main()



Rulează programul

python3 script.py


Când ajunge la pdb.set_trace(), execuția se oprește, iar interfața pdb devine activă, similar cu imaginea de mai jos:


Conform tabelului de mai sus, haideți să accesăm comanda l pentru a afișa unde exact este oprit codul.

Pentru a intra cu debugger-ul în interiorul funcției folosim comanda s (step into). Dacă introducem din nou l pentru a afișa poziția cursorului putem vedea că acesta se află la inceputul funcției factorial

Pentru a accesa valoarea unei variabile putem scrie direct în terminal numele acestei variabile:

Deoarece avem acces direct la variabile, pdb suportă efectuarea diferitor operații cu aceste variabile direct în terminal.

Pentru a continua la linia următoare folosim comanda n.

Atunci când funcția factorial este din nou apelată (fiind funcție recursivă) introducem din nou comanda s pentru a intra în interiorul funcției. Dacă afișăm din nou valoarea variabilei num putem vedea că valoarea nu s-a schimbat după prima iterație - ceea ce duce la executarea acestui cod la infinit(buclă infinită). Pentru a rezolva problema va fi nevoie sa scădem 1 din valoarea num cu fiecare iterație.
Pentru a intrerupe sesiunea de debugging introducem comanda q, iar apoi modificăm codul pentru a aplica soluția:

def factorial(num):
    if num == 0:
        return 1
    return num * factorial(num - 1) # trebuie sa scadem 1

def main():
    number = 5
    result = factorial(number)
    print(f"Factorialul lui {number} este {result}")

if __name__ == "__main__":
    main()


După ce accesăm funcția folosind comanda s și facem 2 iterații putem vedea ca valoarea variabilei num a devenit 4 in loc de 5.


Acum ca am confirmat că algoritmul nostru nu va rula la infinit putem lăsa codul să continue normal până la finalul programului. Pentru a continua execuția introducem comanda c.

După execuția programului putem vedea următorul mesaj afișat in terminal:

Factorialul lui 5 este 120


Concluzie

Debugger-ul pdb este esențial pentru identificarea erorilor și înțelegerea fluxului de execuție într-un program Python. Prin utilizarea punctelor de întrerupere, a comenzilor interactive și a capacității de a inspecta variabilele, poți găsi rapid problemele din cod și le poți remedia.

Чтобы получить доступ к облачной лаборатории, необходимо войти в систему.

Войти