Tracing mit hunter macht Laune
Hallo, hier kommt keine Frage sondern Begeisterung. Ich habe mal hunter[1] ausprobiert. Die Aktivierung über die Umgebungsvariable ist etwas komisch, aber das Ergebnis ist wirklich schön: PYTHONHUNTER="module_startswith='mymod'" myscript.py myargs Ich persönlich bin kein großer Freund vom Debugger und dem zeilenweisen Durchhopseln durch den Code. Per Tracing sehe ich was er macht. Das zusammen mit print+assert reicht meist voll aus. Wie seht ihr das? Gruß, Thomas [1] https://pypi.org/project/hunter/ -- Thomas Guettler http://www.thomas-guettler.de/ I am looking for feedback: https://github.com/guettli/programming-guidelines
On 24/01/2019 13:31, Thomas Güttler wrote:
hier kommt keine Frage sondern Begeisterung.
Ich habe mal hunter[1] ausprobiert.
Sieht recht beeindruckend aus (ohne es ausprobiert zu haben).
Ich persönlich bin kein großer Freund vom Debugger und dem zeilenweisen Durchhopseln durch den Code.
Man muss nicht zwingend jede Zeile einzeln ausführen. Du kannst mit `r` eine Funktion/Methode bis zum Ende ausführen oder mit `until` alles bis zu einer bestimmten Zeile ausführen. Außerdem gibt es bedingte Breakpoints.
Per Tracing sehe ich was er macht. Das zusammen mit print+assert reicht meist voll aus.
Wie seht ihr das?
Ein Debugger ist nützlich, wenn du interaktiv arbeiten willst, also spontan entscheiden willst, wann du dir was anschaust. Viele Grüße Stefan
Thomas Güttler schrieb am 24.01.19 um 13:31:
Ich persönlich bin kein großer Freund vom Debugger und dem zeilenweisen Durchhopseln durch den Code. Per Tracing sehe ich was er macht. Das zusammen mit print+assert reicht meist voll aus.
Danke für den Tipp zu hunter. Ich habe mir das Tool noch nicht angeschaut, es sieht aber nützlich aus. Ich kann mich an einen Post-Mortem-Debugger für Java erinnern, mit dem ich nach dem Fehler "zurückspulen" und Variablen aus vorherigen Zeitpunkten anschauen konnte. Ob es das auch für Python gibt? Besonders für nebenläufige Anwendungen war dieses Tool äußerst nützlich. Auch der Debugger von Smalltalk bzw. Pharo gefällt mir gut. Dort kann ich zur Laufzeit das Programm verändern und mit den Änderungen direkt weiterarbeiten, ohne das Programm neu starten zu müssen. Auf diese Weise lässt sich sogar eine fehlende Klasse/Methode/... ergänzen und Test-Driven-Development mit Spaß erleben. Auch das wäre eine schöne Ergänzung für Python. Gruß, der Marco.
Marco Bakera schrieb am 24.01.19 um 17:49:
Ich kann mich an einen Post-Mortem-Debugger für Java erinnern, mit dem ich nach dem Fehler "zurückspulen" und Variablen aus vorherigen Zeitpunkten anschauen konnte. Ob es das auch für Python gibt? Besonders für nebenläufige Anwendungen war dieses Tool äußerst nützlich.
Das PyPy-Projekt hat mal sowas gebaut: https://morepypy.blogspot.com/2016/07/reverse-debugging-for-python.html Wenn dein Programm also mit PyPy funktioniert, kannst du es dir mit ihrem "revpdb" ansehen.
Auch der Debugger von Smalltalk bzw. Pharo gefällt mir gut. Dort kann ich zur Laufzeit das Programm verändern und mit den Änderungen direkt weiterarbeiten, ohne das Programm neu starten zu müssen. Auf diese Weise lässt sich sogar eine fehlende Klasse/Methode/... ergänzen und Test-Driven-Development mit Spaß erleben. Auch das wäre eine schöne Ergänzung für Python.
Wenn du den Code verändern möchtest, ist mir da zumindest nichts bekannt. Würde theoretisch gehen, da Python auch nur Bytecode ausführt, der sich verändern ließe. Den quasi dem laufenden Interpreter unter den Füßen wegzuziehen ist aber grundsätzlich nicht ganz ungefährlich, müsste also vermutlich direkt von CPython unterstützt werden. Allgemein hat Python aber den Vorteil, dass das Neustarten eines Programms in der Regel recht schnell geht. Vielleicht braucht das Herstellen des zu untersuchenden Programmzustands dann mehr Zeit, aber auch das hält sich meist in Grenzen, wenn die richtigen Haltepunkte erstmal gefunden sind (was bis zu dem Zeitpunkt, wo du das Programm verändern wollen würdest, ja vermutlich der Fall ist). Die Möglichkeit zur Programmänderung im Debugger ist also bei Python weniger "notwendig" als sie es bei kompilierten Sprachen mit schwerfälliger Laufzeitumgebung (hüstel, Java, hüstel) wäre. So ein Feature macht natürlich was her, aber wirklich gebraucht oder vermisst habe ich es in Python nie. Stefan
Am 24.01.19 um 17:49 schrieb Marco Bakera:
Thomas Güttler schrieb am 24.01.19 um 13:31:
Ich persönlich bin kein großer Freund vom Debugger und dem zeilenweisen Durchhopseln durch den Code. Per Tracing sehe ich was er macht. Das zusammen mit print+assert reicht meist voll aus.
Danke für den Tipp zu hunter. Ich habe mir das Tool noch nicht angeschaut, es sieht aber nützlich aus.
Ich kann mich an einen Post-Mortem-Debugger für Java erinnern, mit dem ich nach dem Fehler "zurückspulen" und Variablen aus vorherigen Zeitpunkten anschauen konnte. Ob es das auch für Python gibt? Besonders für nebenläufige Anwendungen war dieses Tool äußerst nützlich.
Auch der Debugger von Smalltalk bzw. Pharo gefällt mir gut. Dort kann ich zur Laufzeit das Programm verändern und mit den Änderungen direkt weiterarbeiten, ohne das Programm neu starten zu müssen. Auf diese Weise lässt sich sogar eine fehlende Klasse/Methode/... ergänzen und Test-Driven-Development mit Spaß erleben. Auch das wäre eine schöne Ergänzung für Python.
Ich bin großer Freund vom nicht-interaktivem Debugging. Ein kleiner unittest führt eine kleine Methode aus. Der Wunsch den Zustand vorher zu sehen ist groß, natürlich auch bei mir. Und genau so bekomme ich das auch: In der vorhergehenden Zeile "assert 0, myvar" einfügen, Test erneut ausführen, Zustand sichtbar - alles prima. Ich weiß, das Vorgehen ist relativ uncool und langweilig. Gruß, Thomas -- Thomas Guettler http://www.thomas-guettler.de/ I am looking for feedback: https://github.com/guettli/programming-guidelines
participants (4)
-
Marco Bakera
-
Stefan Behnel
-
Stefan Schwarzer
-
Thomas Güttler