Soweit ich das beurteilen kann, erkennt pdb nicht, wenn sich der Quellcode zwischen "runs" geändert hat. Das heißt, wenn ich debuggen, einen Fehler feststellen, diesen Fehler beheben und das Programm in pdb erneut ausführen (d. H. Ohne pdb zu beenden), wird pdb den Code nicht neu kompilieren. Ich werde immer noch die alte Version des Codes debuggen, auch wenn pdb den neuen Quellcode auflistet.
Also aktualisiert pdb den kompilierten Code nicht, wenn sich die Quelle ändert? Wenn nicht, gibt es einen Weg, dies zu erreichen? Ich möchte in der Lage sein, in einer einzigen PDB Sitzung zu bleiben, um meine Haltepunkte und so zu behalten.
FWIW, gdb wird bemerken, wenn sich das Programm, unter dem es debuggt, darunter ändert, allerdings nur bei einem Neustart dieses Programms. Dies ist das Verhalten, das ich versuche, in pdb zu replizieren.
Was meinst du mit "Programm in pdb erneut ausführen?" Wenn Sie ein Modul importiert haben, liest Python es nicht erneut ein, es sei denn, Sie werden explizit dazu aufgefordert, d. H. Mit reload(module)
. % Co_de% ist jedoch bei weitem nicht kugelsicher (siehe xreload für eine andere Strategie).
Beim Nachladen von Python-Code gibt es viele Fallstricke. Um Ihr Problem robuster zu lösen, können Sie pdb mit einer Klasse umbrechen, die beispielsweise Ihre Haltepunktinformationen in eine Datei auf der Festplatte aufzeichnet, und sie auf Befehl wiedergeben.
(Entschuldigung, ignoriere die erste Version dieser Antwort; es ist früh und ich habe deine Frage nicht sorgfältig genug gelesen.)
Das folgende Mini-Modul kann helfen. Wenn Sie es in Ihre PDB-Sitzung importieren, können Sie Folgendes verwenden:
%Vor%kann jederzeit alle Nicht-Systemmodule außer main zwangsweise neu laden. Der Code überspringt das, weil er eine ImportError-Ausnahme auslöst ('Interne Modul main kann nicht erneut ausgelöst werden).
%Vor% ipdb %autoreload
Erweiterung
6.2.0 Dokument Liste :
%Vor%