Debugging mit Python PyCon DE https://www.youtube.com/watch?v=9JFRWC2KI7k Transkript (automatisch erstellt) 0:00 wenn ich da waren schwarzen freiberufler software entwickler ich erzähle euch jetzt ein bisschen was über die banken mit piper 0:06 erst mal zu einem kleinen überblick man muss nicht immer sofort gleich zum die bagger greifen deswegen erzähle ich am anfang ganz kurz was to print 0:16 anweisungen und logging dann zu allgemeinen konzepten also die eigentlich für die bagger generell also praktisch alle die bagger gelten nicht 0:24 nur jetzt für breiten ja dann werde ich einige dieser konzepte am beispiel von pb also das ist ein modul und andi wagner der mit partner 0:33 mitgeliefert wird erklären am ende möchte ich noch so ganz kurz ein bisschen auf andere partner die bürger 0:41 eingehen das heißt eigentlich sage ich höchstens einsatz dazu das ist nur eine folie und zum schluss kommt die zusammenfassung klar 0:48 so print anweisung oft ausreichend also ja also wenn ich jetzt bloß mal irgendwie 1 2 -werte prüfen muss oder ich habe selbst schon bekommen möchte 0:58 sehen bei welchem wert ist dass aufgetreten oder sowas da muss ich nicht unbedingt zum die bagger greifen sehr einfach einsatz war 1:07 vorteile gegenüber den bagger gibt sogar auch also davon abgesehen dass es ein bisschen einfacher ist das ist bei coop mit timer uns an 1:15 eingesetzt werden kann wenn ich jetzt also zum beispiel netzwerk habe der schickt im finalen frage zum server und ist so programmiert 1:22 dass er wenn er nach zehn sekunden keine antwort bekommt dann irgendwie auf gibt und was anderes macht und das also dann in dem fall wenn 1:32 ich jetzt da die banker halten schritt für schritt durch geht durch die anweisungen dann führt sie sich der code anders verhalten als wenn ich ihnen 1:39 jetzt einfach durchlaufen lassen also dann ist dieser teil macht vielleicht schon überschritten und dann passiert was anderes und das möchte ich nicht 1:46 also ich bin dann eben von drei mal nicht betroffen die andere sache ist eben wenn ich einfach wie zum beispiel ich weiß ich habe irgendwie ein problem 1:53 mit einer schleife bei einem bestimmten wer tritt an problem auf lenzen trace beck ist dann ist das noch relativ einfach schwieriger ist wenn 2:01 irgendwo etwas komisches passiert ich möchte jetzt meinetwegen wissen beim schleifen durchlauf wie entwickeln sich die werte eigentlich in der schleife 2:09 wenn ich das nicht so vorher genau weiß oder entspricht das dem was ich denke wie es sich verhalten sollte für sowas im print anweisung können durchaus 2:16 praktisch oder sogar eben vorteilhaft gegenüber das ist wie man es eher nicht machen sollte habe ich schon also hundertmal 2:23 gesehen so circa einen trennstrich den mann also eine ausgabe hoffentlich dann wiedersieht und verschiedene ausgaben mit verschiedenen 2:34 arten von trends strichen markiert teilweise dann hier noch mit mehreren ausgaben pro ja ich sag mal die back oder print einheit 2:44 es hat denn also es hat mehr drauf und nachteile also zum einen wenn man jetzt man sich ja eine ausgabe nur die rennstrecke und werten da 2:53 man kann also leicht vergessen welche markierung also mit viele ausgaben hat welche markierung zu welchem wert gehört und 3:02 eine verwandte sache wenn es noch andere ausgaben gibt also stehen diesmal wegen drei wertungen untereinander und ich weiß jetzt nicht 3:10 gehört jetzt ist jetzt die dewag ausgaben sind das die ersten beiden wert oder sind das alle drei oder 3:17 und ein anderer nachteil ist dass entfernung von debugging ausgaben fehleranfällig ist wenn man vor allem also wenn man mehrere ausgaben hat zu 3:26 einer markierung weil man dann unter umständen leicht was entfernt was gar nicht die wahlgänge ausgabe war und dann hinter irgendwie das programm 3:34 naja ok bei einem print es wird dann vielleicht eine ausgabe fehlen oder so ist nicht auch ist nicht unbedingt schön je nachdem was das ist 3:42 ja ich habe mir mal so ein verfahren hier ausgedacht so eine empfehlung um möglichst viele dieser nachteile zu umgehen 3:51 ja also irgendwie einen trennzeichen also wenn hier sind das halb drei gleichheitszeichen die dann immer am anfang der zeile stehen 4:00 danach keine bezeichnung und dann der wert den ich ausgeben möchte und dann sehe ich also muss ich mich nicht daran 4:09 orientieren ob ich jetzt da sternchen oder gleichheitszeichen habe sondern ich weiß dann auch ich sehe dann was ich ausgebe muss ein bisschen 4:17 aufpassen wenn man den gleichen wert an verschiedenen stellen aus gibt dass man dann irgendwie schon ja okay dann muss man vielleicht ein zwei drei oder man 4:25 schreibt dahinter in welcher funktion das jetzt ist oder so was ja die bank ausgaben sind in der ausgabe so halbwegs leicht zu erkennen wenn man zum 4:37 beispiel den screen arbeitet dann kann man auch 1 comeback versuchen nach den gleichen zeichnen und im wertzeichen dann findet man die debug ausgaben auch 4:45 ganz schnell ich habe hier bewusst kein prozentzeichen und als prozent es oder sowas verwendet 4:53 weil das sind probleme immer als bei opel da müsste ich sonst immer ein element ist opel schreiben statt des wertes um das sicher zu machen 5:02 man kann diese schreibarbeit die man hier zusätzlich hat gegenüber diesem ganz einfachen verfahren kann man etwas reduzieren indem man sich zum beispiel 5:09 für seinen lieblingsteddy trophy makro definiert in dem fall also hier ist mal 14 angegeben und wenn ich jetzt also bei mir weg / p 5:19 drücken dann krieg ich schon diese gleichheitszeichen den doppel punkt und komma und so weiter und der cursor wird vor dass vor dem doppelpunkt besetzt 5:29 dann muss ich das nur schreiben drücke ihr sc und dann großer und dann bin ich am ende zahlen sollten modus keine rest ergänzen so blogging ist ganz ähnlich 5:39 wie die print anweisung hat einen nachteil ist es wie man hier sieht ein bisschen schwieriger einzurichten wenn jetzt die anwendung von logging benutzt 5:49 dann ist das halb so wild dann ist der unterschied nicht besonders groß also es hat ein paar vorteile also eine ganze menge vorteile sogar das also 5:59 man kann je nachdem ob man jetzt im produktionsbetrieb zum beispiel läuft man kann diesen lockt level ändern auf 6:04 die bank oder info oder so je nach dem und dann ohne irgendwas am code ändern zu müssen oder jetzt einen unlock anweisung das ändern zu müssen einfach 6:14 die geschwätzigkeit sozusagen ausgabe steuern die ausgabe ist also flexibel konfigurierbar das ausgabeformat und es ist dieser block anweisung gesetzlicher 6:25 also dann ja jetzt die bagger konzepte das sind also ja wie gesagt konzepte die sich eigentlich alle die bagger teilen 6:34 es gibt zwei modi erstmal den normalen programmablauf was sich also vom deswegen der programmablauf nicht unterscheidet und normal programmablauf 6:43 das ist der normale ablauf so und einen interaktiven modus wo ich die wagen kommandos eingeben kann oder einem grafischen die bagger mann wegen 6:54 irgendwelcher buttons klicken kann um zu sagen jetzt gehen schritt weiter zeigt mir was passiert wenn ich jetzt diese anweisungen ausführen das sehen wir 7:02 gleich noch ein bisschen detaillierter programm zeiger ist ein wichtiges konzept also wenn ich jetzt eben in diesem interaktiven modus bin 7:10 dann markiert mir das eben ja wer was die zunächst also die als nächstes ausgeführte anweisung ist also wenn ich dann sage ich jetzt führe aus also dann 7:20 ist bevor ich das aus für ist diese anweisung markiert ja es gibt zwei verschiedene arten von ausführungen dass er eine ist next das 7:29 heißt im prinzip jetzt führe genau diese anweisung aus mit inklusive aller unter programm aufruf und ich bin sofort wieder im interaktiven modus oder ich 7:38 sage es sap oder einen entsprechenden daten oder sohn im grafischen die bagger und springe dann also auch in enthalten darunter programme aufrufen also jetzt 7:49 methoden aufrufe das können sogar ganz subtile sachen seien irgendwie traktoren oder so was ich habe eine vorstrafe bin auf der zeile wo vorsteht drücke step 7:57 und auf einmal bin ich irgendwo in der generator funktion oder so also kann auch passieren dann mit step und ein anderes ganz wichtiges konzept sind 8:06 unterbrechung punkt der breakpoint wo ich die ausgabe ausführung anhalten kann und dann wieder in diesen interaktiven 8:14 modus komme also wenn zum normalen in den interaktiven dieser die bagger pdb ist als bestandteil der breiten bibliothek hat 8:23 nur ein kommandozeilen modus also die eingabezeile ist für viele zwecke ausreichend hat eine hilfefunktion entweder generell also in der überblick 8:33 über alle befehle dies gibt oder eben zu einem bestimmten befehl und da gibt es noch eine schöne website jetzt mal abgesehen von der module dokumentation 8:41 in der die mit pitt kommt gibt es hier noch dieses breiten model of the week da hat er das ein bisschen ausführlicher beschrieben werden 8:50 so aktivierung also häufig einfach immer so im programmcode import pb und pbc trace wenn ich dann das programm laufen lassen 9:01 wird es an der stelle nämlich abgebrochen aber unterbrochen und ich komme in dieser interaktiven modus oder ich kann in der shell diesen die bagger 9:10 spd module als hier als modul argument angeben und dann wird das programm das jetzt hinter steht unter die berger kontrolle ausgeführt dass wenn ich das 9:21 so mache dann komme ich erst mal inter aktiven modus setzt seinen breakpoint erkläre ich gleich noch was zu und drückte gbc 1 für continue und gehe dann 9:32 also in den ausführungen modus und an diesem break point wird dann komme ich wieder automatisch in den interaktiven modus dann gibt es noch so soll die post 9:40 mortem debugging dass ich bei einer exception automatisch in die bagger springer aber will ich hier nicht weiter jetzt erklären 9:46 für ein paar befehle die ich jetzt gleich beschreibe benutze ich also dieses beispiel also haben wir dieses import pdb und segways wurde direktor ii 9:57 listing also vom aktuellen verzeichnis und füge das also mit dem aktuellen verzeichnis und dem ersten eintrag in der liste 10:06 erzeugt hier ein paar gäbe denn aus sodann mal so kleinen überblick über den kot wenn ich jetzt also im interaktiven modus bin 10:18 dann kann ich also mit liszt oder auch kurz den code anzeigen das sind immer so fünf zeilen davor und fünf zeilen hinter der aktuellen oder der nächsten 10:27 auszuführenden anweisungen ich kann auch eine zahl nummer angeben dann sage ich eben wüsste jetzt nicht da wo der programm tiger ist sondern eben um diese 10:37 zeile darum um 15 davor und dahinter oder ich kann auch zwei in ganzen zahlen bereich listen so wenn ich im interaktiven die bagger modus bin dann 10:48 kann das zum beispiel so aussehen ich habe jetzt hier also dieses die werke example also das ist genau dieses beispiel 10:54 und wenn ich jetzt das so ausführe und dieses set trace ausgelöst wird dann ist das im prinzip was ich sehe oder genau genommen bis hierhin bis zum ende dieser 11:05 roten zeile und sie jetzt also darum steht jetzt in rot steht items gleich wo ist hier das 11:14 ist also die nächste auszuführen der anweisung man sieht auch darunter noch mal habe ich auch noch mal rot markiert 11:21 5 und dann dieser pfeil das ist also dieser ausführung styger und die zeile nochmal steht auch noch mal oben in dieser ausgabe also hier 11:31 so das ist das was ich bekommen also ich das zunächst sieht man nur das und wenn ich allein gbl return dann sehe ich also dieses listing darunter mit dem programm 11:40 zweier so jetzt kann ich anweisungen ausführen im interaktiv entweder mit next oder mit step das habe ich ja schon mal erzählt 11:49 also step springt in unter programme oder unter routinen besser gesagt die funktion kann ich damit nicht fressen also zum beispiel osc cpd im beispiel 11:58 ist direkt mit zehn punkten wenn ich dann step anwenden da springe ich nicht rein also das geht nur mit reinem paten code 12:09 so wenn ich jetzt also an der stelle bin wo ich eben war und drücken dann ist also sehe ich also jetzt diesen bereich hier bis dahin das heißt ich bin über 12:19 die vorherige einweisung übergesprungen und das wird jetzt die nächste auszuführende sein wenn ich jetzt noch mal ist aus gebe so zur kontrolle so 12:27 einfach und mir das mal anzugucken dann sehe ich das oder auch nicht so jetzt 12:35 das ist also jetzt die nächste auszuführende anweisungen und wenn ich jetzt mal für step verbände dann kriege ich eine ausgabe call und ich sehe dann 12:45 dass die nächste zeile also diese staff freuen was jetzt hier brot ist das ist jetzt schon einmal aufgerufen kommt nämlich in posix partei also man sieht 12:53 daran dass dies unter linux oder alt unter einem prozess dem ausführen und das ist also die us-parteien methode oder funktion 13:03 so da würde ich jetzt rein springen das vertieft jetzt aber nicht weiter so man kann also innerhalb des die bergers einzelne werte ausgeben also 13:12 ausdruck also wir allgemein geht natürlich auch irgendwie name es geht ja auch sagen ganze ausdruck der kann auch unter programm aufrufe enthalten das 13:22 gleiche gilt auch mit ppp ist so ähnlich wie print und pps pretty print aus diesem print modul ist sonja sonderfall gibt mir die 13:33 argumente aus dann return ist da auch so ein befehl der vorübergehend den interaktiven modus verlässt 13:44 das heißt ich bin irgendwo in einer methode drin und wenn ich jetzt ja und rita nein gebe da läuft der code nicht interaktiv weiter und geht aber eine in 13:55 die berger in den interaktiven modus zurück wenn ich am ende der funktion der methode wenn ich auf menschen gestoßen bin 14:01 oder wenn exception auftritt so unterbrechung punkte wichtiges konzept 14:10 also wo ich markieren kann da kann berg rot anhalten unter bestimmten bedingungen also die bedingungen sind optional muss man nicht setzen kann man 14:18 aber dieser breakpoint kann auch vorübergehend ein oder ausgeschaltet 14:24 werden und es lassen sich beliebig viele definieren die wir so also b alleine oder blake also normalerweise wenn man schon bisschen 14:36 die bagage bearbeitet hat dann wird man einfach die kürzel verwenden also nur diese buchstaben befehle listet mehr alle aktuell definierten auf ich kann 14:45 breakpoint definieren mit einem ganzen freistaat und ich muss eine zahl nummer oder eine funktions namen angeben das ist jetzt hier nicht gezeigt mit dem 14:54 funktions namen und ich kann optional komma bedingungen dahinter schreiben wobei die bedingungen nicht irgendwie in anführungszeichen gesetzt wird ich sage 15:02 es nur dazu man könnte ja auch denken das wird ja vielleicht dann später irgendwie mit exakter egal oder sonstwas ausgeführt und dann ist es muss es einen 15:09 string sein oder so was ist heute direkt dahinter geschrieben sie dann ein bisschen komisch aus vielleicht aber so dieser datei pfad den mann geben kann 15:20 das ist immer ein relativer dann teilt also relativ staat also der ganze modul fahrt oder das was ich mit der umgebungsvariablen partie 15:29 setzte das wird durchsucht und relativ dazu eben über einen import wird der name oder die datei entsprechend aufgelöst aber was sich ein bisschen 15:39 irritierend findet obwohl das eigentlich sich anna import anweisung orientiert kann man nicht ein punkt als trainer verwendung muss den schrägstrich nehmen 15:46 oder vielleicht unter windows den umgekehrten schrägstrich das weiß ich nicht genau 15:52 und die tat und die bedingung sind optional das hatte ich ja schon gesagt zur bedingungen und datei fahrt also wenn ich schon in einer bestimmten 16:00 funktion entschuldigung in der bestimmte datei bin und ich möchte jetzt also erwartet dass also ich möchte ein break point setzen 16:09 in einer zb funktionär methode in der gleichen datei dann brauche ich den datei fahrt nicht angeben dann schreibe ich einfach break und die zahl nummer 16:18 ja man kann auch nachdem ein break point schon definiert ist eine bedingung setzen also mit der breakpoint nummer die man also mit mit break alleine 16:27 bekommt da ist immer diese breakpoint aufliste geschichte da ist immer so dass auch einen diese blackpoint nummer dabei und man kann eben die 16:37 bedingung daneben auch dahinter schreiben oder muss continuous macht einfach weiter mit conti mir sagt im prinzip verlasse 16:44 diesen interaktiven modus macht nicht interaktiv weiter wenn man kein break point gesetzt hat der getriggert wird dann passt dann läuft das programm auch 16:53 bis zum ende oder bis zur exception ja dann habe ich hier noch mal eine saite alternative die bagger für taipan 17:05 weil also einerseits finde ich dass dieser interaktive die wir häufig reicht andererseits kann ich gut verstehen wenn jemand sagt dass es doch ein bisschen 17:15 unbequem oder primitiv dass sich jedes mal um mich zu orientieren vielleicht noch mal das l ein geben muss wenn ich den code den ich da die bagger nicht 17:22 schon sehr gut kenne dann gibt es eben noch alternativen so allgemeine liste bekommt man durchsuche im package index 17:33 bestimmte textmodus die bagger sind also dbb + + und pb der erste davon also pbb benötigten das ist also eine pseudo ii kann man sagen 17:47 also mit fenster bereichen wo zum beispiel die im kontext der funktion gerade aktuellen werte angezeigt werden also für die 17:58 namen die in der funktion vorkommen oder einen aufruf stack in einem anderen fenster das ist also aufruft habe ich ja nicht diskutiert ist manchmal nützlich 18:07 zu wissen pb + + und pcb sind ganz ähnlich wie der interaktive also wie pdb fügen aber noch ein paar nette features 18:18 noch hinzu und dann gibt es ein party die berger also was also diese entwicklungsumgebung ich schon mit breiten mitkommt hatten 18:27 die wagen modus dann gibt es wind pdb was entgegen dem namen nicht nur für windows funktioniert sondern mit dario experten geschrieben ist und für also 18:39 mac und linux auch genau so funktioniert das ist also ein ganz ganz einsehen grafisch hat die bagger und dann gibt es natürlich auch noch 18:48 andere breiten idee ist also ja also gibt's ein clip swing wer und sonst was alles also wegen idee ja wie zum beispiel auch einen grafischen die 18:59 bagger haben ja hier noch eine zusammenfassung also print anweisungen können hilfreich sein also man muss nicht gleich begreifen 19:08 login ist ein bisschen umständlich aber flexibler dagegen konzepte habe ich geschrieben programm zeiger unterbrechung punkte 19:18 dann die ausführungen einzelner anweisung mit oder ohne unter programm aufrufen ich kann den code um eine stelle mit listen und mit ns und r also 19:29 ausführen also unter die bagger kontrolle mit ppp und acht objekte anzeigen und unterbrechung punkte mit mit b also oder blake setzen und mit c 19:41 war weiter also im nicht inter aktiven modus ausführen ja okay und zu den die bahn habe ich auch was gesagt so danke euch für die aufmerksamkeit 19:50 danke ich ja sommer gibt es fragen zum vortrag 20:02 keine fragen hallo ich habe keine frage aber ich darf ja auch etwas anmerken also was ich sehr 20:16 elegant finde neulich erst entdeckt abel ist statt direkt eine ganze session land die bagger zu starten kann ich wenn ich 20:23 irgendwo weiß wo mein problem liegt ja direkt den die bagger importieren und jpg bz trace mein programm einfach starten lassen und 20:34 springt dann genau an der stelle wo ich ihn schauen wir in denen die banker also es hat eine anmerkung dazu von mir es hat einen nachteil man wird das 20:44 sozusagen auch nicht los wenn ich dann in der die bagger session bin und ich kommen habe ja vorbei wird da immer unterbrochen ich kann diesen blackboard 20:49 nicht abschalten das ist ein nachteil vielleicht noch eine anmerkung der die berger also pdb hat noch mehr features ich hab jetzt eben dass da das hier 20:58 diskutiert was ich so wo ich dachte das kriege ich in die 20 minuten rein ist es in der multi threading anwendung oder multiprocessing anwendungen auch 21:13 möglich einzelne prozesse zu die bahn prozesse mit dem rhein pdb nicht reds hat zumindest funktioniert ähnlich backbones gesetzt habe 21:22 ok ich weiß jetzt nicht mehr hundertprozentig auf sie mit dem segway spa oder ein break point von außen ich glaube mit einem von beiden hat es 21:29 funktioniert wenn man nicht also ich weiß jetzt nicht mehr so genau ist ein bisschen knifflig bei dem wind pdb die verben glaube ich explizit damit dass es 21:37 die trading unterstützt und die besseren die bagger können auch sich action sozusagen zu anderen prozessen also man kann oder hat den vorteil man wenn man 21:47 es mal den server prozess hat und man kann sich dann wenn der schon läuft mit dem verbinden und denen die banken dann muss man auch wahrscheinlich hätte ich 21:54 mal ganz stark irgendwie vorbereitet sein das okay 22:07 wie sieht denn mit erfahrungswerten aus für den overhead von dem login module also sprich wenn ich jetzt irgendwie noch 580 schachteln schleife drin bin 22:16 und 20 debug anweisungen drin habe also messung habe ich keine gemacht aber ich würde schon damit rechnen wenn du also eine zeitkritische schleife zum beispiel 22:26 hast dass du da nicht unmengen von logging rein tun solltest womit ich rechne ist das wenn du keinen tatsächlich kein login hast also sprich 22:35 du hast dann nur weint wegen lockt die vag stehen aber der debug level ist so eingestellt dass das nicht ausgegeben wird dann wird sicherlich schneller sein 22:41 als wenn was ausgegeben wird aber also es wird sicherlich auch wenn nichts ausgegeben wird irgendwie ein bisschen was kosten aber ja also wenn du schon 22:51 weiß dass ein abschnitt zeit kritisch ist dann würde ich da vielleicht ja zurückhaltend sein sage ich mal mit dem login aber ich würde einfach mal messen 22:59 ich würde jetzt nicht sagen login ist zu langsam und deswegen schreibe ich das war nicht rein sondern ich würds mal eventuell sogar mit dem profiler 23:06 ausprobieren weitere fragen 23:16 gut wenn keine fragen sind dann ja danke ich dir auf alle fälle für den vortrag dankeschön des friedens zu hören