Code-Ausführung im eingebetteten Python-Interpreter verfolgen

8

Ich möchte eine Anwendung mit integriertem Python-Interpreter und grundlegenden Debugging-Funktionen erstellen. Jetzt suche ich in der API nach Funktionen, mit denen ich Schritt für Schritt Code ausführen und die Nummer der aktuellen Codezeile abrufen kann, die gerade ausgeführt wird (oder gerade ausgeführt wird).

Offizielle Python-Dokumente scheinen mir ein bisschen unterentwickelt zu sein, wenn es darum geht, zu verfolgen und Profilierung . Zum Beispiel gibt es keine Informationen über die Bedeutung des Rückgabewertes von Py_tracefunc .

Bisher habe ich Folgendes zusammengestellt:

%Vor%

Der Compiler gibt jedoch den folgenden Fehler aus:

%Vor%

Ich arbeite auf ManjaroLinux und benutze das folgende, um das oben genannte zu kompilieren:

%Vor%

Ich habe festgestellt, dass ich PyFrameObject durch struct _frame ersetzen und dann kompilieren kann, aber jeder weiß, dass es ein schmutziger Hack ist, keine Lösung.

Die ausführbare Datei gibt Folgendes aus:

%Vor%

Aber ich möchte, dass die Ablaufverfolgungen dem Ausführungsfluss des Skripts folgen (das heißt: Beginnen Sie mit Zeile 3, dann mit 4, 5 und dann mit dem Funktionsaufruf 2).

Ich konnte nichts über die schrittweise Ausführung finden.

Können Sie weitere Quellen zur Python C-API mit weiteren Informationen und einer Einführung in das Thema empfehlen?

Ich habe die Antwort mit Bounty vergeben, da sie sowieso ausläuft. Allerdings suche ich immer noch und wäre dankbar für Antworten auf andere Fragen von oben.

    
Luke 03.12.2015, 20:42
quelle

3 Antworten

8
%Vor%

Dieser Fehler bedeutet, dass PyFrameObject nicht deklariert wurde. Ich habe eine Google-Suche durchgeführt, die mir frameobject.h im Python-Quellbaum ist, wo diese Struktur deklariert ist.

Ich erwarte, dass Sie die Zeile

hinzufügen können %Vor%

um dies zu beheben.

    
dsh 03.12.2015 21:12
quelle
0

Das pyFrameObject hat ein

%Vor%

Feld. Du kannst es benutzen. Aber anscheinend speichert es nicht immer den richtigen Wert. Also solltest du wahrscheinlich die Funktion verwenden:

%Vor%

dann können Sie

verwenden %Vor%

um den aktuellen Dateinamen zu erhalten

%Vor%

um den aktuellen Funktionsnamen zu erhalten und

%Vor%

um eine Stufe im Call-Stack zu erreichen.                                         .

    
Pierre Saunier 10.08.2017 15:03
quelle
-1

PyFrameObject ist nur ein _frame struct. Ersetzen Sie einfach PyFrameObject durch _frame in Ihrer Funktionssignatur und Sie müssen keine zusätzlichen Python-Header hinzufügen.

    
John McKowen 25.10.2016 17:01
quelle

Tags und Links