Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> Python

Python Debugger:Verbeter moeiteloos uw foutopsporingsvaardigheden

Debuggen van Python-code komt voor velen van ons neer op het toevoegen van printstatements en proberen te redeneren wat er aan de hand is op basis van de output. Het is niet ideaal, maar om de een of andere reden willen mensen de Python-debugger gewoon niet aanraken.

Inhoudsopgave

Print gebruiken om code te debuggen

Als jij een van die mensen bent die print . gebruikt voor debuggen, Ik veroordeel je niet . Python leren is moeilijk. Programmeren is moeilijk. Het leven is hard. Ik begrijp dat het vermoeiend is om nog iets te leren als je het al moeilijk hebt. En dat printstatement aan je code toevoegen... het is gewoon makkelijker. Een kleine bekentenis:ik doe het ook nog steeds de hele tijd. Het is niet zo erg als sommigen doen voorkomen.

Dat gezegd hebbende, ga ik je een trucje leren dat net zo eenvoudig is als het toevoegen van printinstructies aan je code. Deze truc geeft je echter oneindige debugging-krachten en stelt je in staat om de wereld te veroveren, mocht dat nodig zijn.

Een Python-debugger-breakpoint instellen

U hebt geen IDE nodig om uw code correct te debuggen. Deze truc werkt altijd, zelfs in de eenvoudigste editor, en zelfs in Jupyter Notebooks.

De truc komt hierop neer:een zogenaamd breekpunt instellen met de instructie breakpoint() . Je kunt het in je code invoegen, ongeacht welke editor of IDE je gebruikt, op het punt waar je normaal gesproken die vervelende printopdracht zou plaatsen.

Dus wat gebeurt er als je dat doet? Laten we het uitzoeken! Maak een eenvoudig programma, zoals hieronder:

def add_two(x):
    return x + 2
for i in range(1, 10):
    a = add_two(i)
    breakpoint()
    print(a)

Wanneer u dit uitvoert, en het maakt niet uit of u dit doet in de REPL, vanaf de opdrachtregel of in uw IDE, wordt u in de Python-debugger met de naam PDB gedropt. Maar wat nu?

De Python-foutopsporing gebruiken

Als ik het kleine programma hierboven start, gebeurt dit:

$ python3 breakpointing.py
> /home/erik/breakpointing.py(7)<module>()
-> print(a)
(Pdb)_

Er zijn een paar dingen te zien hier:

  • Het toont het huidige bestand dat is gestart (breakpointing.py )
  • Daarna toont het de volgende opdracht die op het punt stond te worden uitgevoerd, maar werd onderbroken door de aanroep van breakpoint() .
  • En tot slot zien we de pdb-prompt, wachtend op onze input.

De Python-debugger is eigenlijk een volledig functionerende Python-shell, net als de REPL.

Op dit punt kunnen we de huidige omgeving inspecteren. Laten we eens kijken wat de waarde van a is nu:

(Pdb) print(a)
3
(Pdb) print(i)
1

In plaats van print, kun je ook het pdb-specifieke commando p gebruiken, zoals dit:

(Pdb) p a
3
(Pdb_ p i
1

De volgende regel uitvoeren

Dus wat als we de volgende regel code willen uitvoeren? Er zijn twee opties:

  • Met s of step , voer je de huidige regel uit. De debugger stopt daarna bij de eerst mogelijke gelegenheid.
  • Met n of next , je voert ook de huidige regel uit, maar nu gaat de debugger door totdat de volgende regel van de huidige functie is bereikt.

Om dit duidelijker te maken:step voert graag een functieaanroep in en breekt binnen die functie. In tegenstelling, next voert de functie uit totdat deze terugkeert, en breekt af op de volgende regel.

Andere debuggers en IDE's noemen dit ook 'stap in' (in plaats van stap) en 'stap over' (in plaats van volgende).

Laten we nu deze twee gebruiken:

$ python3 breakpointing.py
-> print(a)
(Pdb) s
3
-> for i in range(1, 10):
(Pdb) s
-> a = add_two(i)
(Pdb) n
-> breakpoint()
(Pdb) n
-> print(a)
(Pdb) n
4
-> for i in range(1, 10):
(Pdb) s
-> a = add_two(i)
(Pdb) s
--Call--
-> def add_two(x):
(Pdb) s
-> return x + 2
(Pdb) s
--Return--
5
-> return x + 2
(Pdb) s
-> breakpoint()
(Pdb)

Zoals je kunt zien, stappen we eerst over de oproep naar add_two met n . De tweede keer stappen we in de functie met s .

Python-foutopsporingsopdrachten

Er zijn meer opdrachten die u zelf kunt proberen. Ik zal ze niet allemaal opsommen, alleen de handigste:

  • h (help):print alle beschikbare commando's. Neemt ook een argument, b.v. h c vertelt je wat de c commando doet
  • c (vervolg):begin te rennen tot het volgende breekpunt
  • l (lijst):vermeld de broncode rond de huidige regel
  • p :print het resultaat van de volgende uitdrukking. U kunt dit gebruiken in plaats van print() . te bellen
  • pp :mooie afdruk, handig voor het afdrukken van gegevensstructuren zoals woordenboeken
  • herstart:herstart het huidige programma

Ga voor de volledige documentatie naar de Python debugger-pagina, waar alle opdrachten worden vermeld.

Blijf leren

Hoewel dit super handig kan zijn, loont het om in de debugger te duiken die je IDE biedt. Als je een VSCode-gebruiker bent, heb ik een tutorial geschreven over het debuggen van Python-code in VSCode.


Python

  1. Python invoer, uitvoer en import
  2. Optimaliseer uw onderhoudsprocessen om de efficiëntie te verbeteren
  3. Python Print()-instructie:afdrukken met voorbeelden
  4. Python-strings:vervangen, samenvoegen, splitsen, omkeren, hoofdletters en kleine letters
  5. Python time.sleep():voeg vertraging toe aan uw code (voorbeeld)
  6. Python New Line:afdrukken ZONDER nieuwe regel in Python
  7. Verbonden vloten verbeteren uw bedrijfsresultaten
  8. Hoe prototypes uw productieproces verbeteren
  9. 5 manieren om uw plaatwerkonderdelen te verbeteren
  10. 3 tips om het onderhoudsplan van uw apparatuur te verbeteren
  11. Tips en overwegingen:leer uw PCB-ontwerpvaardigheden te verbeteren