Wie fügt man einer in Python implementierten Sprache Traceback / Debugging-Funktionen hinzu?

StackOverflow https://stackoverflow.com//questions/9633363

Frage

Ich verwende Python, um eine weitere Programmiersprache mit dem Namen 'foo' umzusetzen. Der gesamte FOO-Code wird in Python übersetzt und wird auch in demselben Python-Dolmetscher ausgeführt, sodass sie in Python übersetzen wird.

Hier ist ein kleiner Stück Foo-Code: generasacodicetagpre.

was übersetzt wird: generasacodicetagpre.

Der 'Watchdog' ist ein GREHLLET (der generierte Code läuft auch in einem Greenlet-Kontext), der die Ressourcennutzung überwacht / begrenzen, da die Sprache nicht vertrauenswürdiger Code ausgeführt wird.

Wie im Beispiel ersichtlich ist, bevor der Python-Code erzeugt wird, werden kleine Änderungen an der Parse-Struktur vorgenommen, um Watchdog-Schalter hinzuzufügen und kleine Änderungen an Funktionskennungen vorzunehmen.

Um alle Anforderungen zu erfüllen, muss ich der Sprache auch Traceback / Debugging-Funktionen hinzufügen, so dass, wenn der Benutzer, wenn die Python-Laufzeit eine Ausnahme auswirkt, was der Benutzer sehen wird, ist der Code-Traceback von Foo (als erhebt, dass der generierte Python-Code-Traceback angezeigt wird ).

Bedenken Sie, dass der Benutzer mit dem folgenden Inhalt eine Datei namens 'program.foo erstellt: generasacodicetagpre.

was übersetzt wird: generasacodicetagpre.

Dann sollte der Ausgang von 'programm.foo' so etwas sein: generasacodicetagpre.

Gibt es einen einfachen Weg, das zu tun? Ich würde eine Lösung bevorzugen, die kein Instrumentieren von Python Bytecode beinhaltet, da es intern auf die Implementierung der Dolmetscher ist, aber wenn es nichts anderes gibt, dann wird es auch in der Instrumentierung von Bytecode es auch tun.

War es hilfreich?

Lösung

You could decorate each generated Python function with a decorator which record the context (filename, function, line number, etc.) to a global stack. Then you could derive your own Exception class and catch it at the top level of the interpreter. Finally, you print out what you like, using information from the global debug stack.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top