pythons Trace-Modul ermöglicht es Ihnen, ein Skript auszuführen, das jede Codezeile wie im Skript und allen importierten Modulen wie folgt ausgibt:
%Vor% Gibt es eine Möglichkeit, dasselbe zu tun, aber nur druckt die Anrufe der obersten Ebene, d. h. nur die Zeilen in myscript.py
, wenn sie ausgeführt werden?
Ich versuche, einen Fehler bei einem Abbruch von Traps zu beheben, und ich kann nicht herausfinden, wo er stirbt. Leider dauert die Verwendung des vollständigen --trace
für immer - das Skript dauert normalerweise 2-3 Minuten und die vollständige Ablaufverfolgung dauert Stunden.
Es ist nicht genau das, was Sie wollen, aber Sie können py.test mit "-s" in Betracht ziehen, was verhindert, dass py.test die Ausgabe Ihrer Druckanweisung erfasst ... Sie können also hier und dort einige Druckanweisungen einfügen für jede Funktion, die Sie in Ihrem Skript haben und erstellen Sie einen Dummy-Test, die nur Ihr Skript wie gewohnt ausführen ... Sie können dann sehen, wo es fehlgeschlagen ist.
Wenn Sie keine Rückverfolgung erhalten, können Sie die Technik halbierung verwenden.
Bearbeiten Sie Ihre Hauptfunktion oder den Skriptkörper und fügen Sie einen exit(1)
-Aufruf ungefähr in der Mitte ein. Dies ist die erste Halbierung.
Führe dein Skript aus. Wenn es Ihren Ausgang erreicht, wissen Sie, dass der Fehler in der zweiten Hälfte ist. Wenn nicht, ist es in der ersten Hälfte.
Verschiebe exit
auf die Hälfte der ersten Hälfte oder die Hälfte der zweiten Hälfte und versuche es erneut.
Mit jedem Zyklus können Sie die Position des Fehlers um die Hälfte des verbleibenden Codes verringern.
Wenn Sie es auf eine Ihrer eigenen Funktionen eingeschränkt haben, halbieren Sie das.