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.
%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.
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. .
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.
Tags und Links python c python-3.x python-c-api