Ermöglicht das Post-Mortem-Debugging in Python das Steppen oder Fortsetzen?

8

Ich habe mit dem Post-Mortem-Debugging herumgespielt und habe einige Probleme. Betrachten Sie das folgende Python-Skript namens example.py :

%Vor%

Ich kann dies ausführen mit:

%Vor%

und gehe dann zu Zeile 2 print 1. / k und setze dann k = 1 und fahre dann mit dem pdb-Befehl c fort.

Wenn ich das jetzt mit dem Post-Mortem-Debugging mache, kann ich die Programmausführung nicht fortsetzen. Ich renne mit:

%Vor%

und dann, nachdem ich in die Shell gefallen bin, mache ich ein:

%Vor%

Ich kann dann den Wert von k wie vorher ändern, aber ich kann mit keiner Programmausführung fortfahren. Pdb wird einfach beendet.

Ich konnte nirgendwo finden, dass es explizit besagt, dass man in einem Post-Mortem-Programm nicht durch ein Programm gehen kann. Es scheint der Fall zu sein. Also möchte ich den Wert von Post-Mortem-Debugging untermauern. Ist der einzige Wert, um den Status des Codes zu überprüfen, als der Fehler auftrat?

    
Rocketman 21.12.2012, 17:49
quelle

1 Antwort

9

Ein Post-Mortem wird aufgerufen, wenn eine Ausnahme ausgelöst wurde.

An diesem Punkt ist der Stapel nicht mehr 'aktiv' und Sie können den Code nicht mehr durchlaufen. Schließlich wurde gerade eine Ausnahme ausgelöst, die anzeigt, dass der Codepfad nicht mehr fortgesetzt werden kann. Was würdest du result erwarten, wenn du zum Beispiel den Ausdruck result = 1. / k hättest?

Ein wörtliches Post-Mortem wird benutzt, um nach dem Tod des Patienten (post mortem, im Lateinischen) zu sehen, was die Todesursache war. Eine post-mortem pdb ist nicht anders. Sie können sehen, wie der Zustand des Programms im Moment des Todes war, aber Sie können den Verstorbenen nicht wiederbeleben.

Mit anderen Worten, der Zweck eines Post Mortems besteht darin, zu verstehen, warum das Programm fehlgeschlagen ist, indem detailliert untersucht wird, welcher Programmstatus im Moment des Scheiterns war.

Der Ausdruck wurde im pdb-Handbuch nicht explizit dokumentiert, wahrscheinlich weil der Begriff "Post Mortem" vermutlich gebräuchlich ist. Der Wikipedia-Artikel zum Debuggen erwähnt dies nebenbei, und Python ist nicht die einzige Sprache, die diese Technik anbietet. Windows-Debugger bieten diese Funktion ebenfalls an < a href="http://stat.ethz.ch/R-manual/R-devel/library/utils/html/debugger.html"> R tut dies ebenso wie andere.

    
Martijn Pieters 21.12.2012, 17:58
quelle

Tags und Links