[Python-de] Tracing mit hunter macht Laune

Stefan Behnel python-de at behnel.de
Fr Jan 25 02:14:14 EST 2019


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


Mehr Informationen über die Mailingliste python-de