Seite 1 von 1

Python-Code tracen

Verfasst: Donnerstag 8. November 2007, 17:35
von Leonidas
Hallo!

Habt ihr eine Ahnung, wie man Python-Code tracen kann? Am liebsten wäre mir ein Programm, welches mir einen Baum mit Funktionen anzeigt, welche aufgerufen werden. Ich habe mir das `trace`-Modul angesehen, das kann die Funktionen etc. anzeigen, aber es zeigt auch Code von Extension-Modulen an, die ich nutze (deren Code mich aber nicht sonderlich interessiert).

Also: Was nutzt ihr zum tracen? Und: Muss ich mir etwa so etwas selbst schreiben?

Re: Python-Code tracen

Verfasst: Donnerstag 8. November 2007, 20:23
von gerold
Leonidas hat geschrieben:Habt ihr eine Ahnung, wie man Python-Code tracen kann?
Hallo Leonidas!

Ich weiß vielleicht nicht ganz was du meinst. So etwas wie einen Call-Stack? Im WingIDE kann ich einen Call-Stack einblenden. Der zeigt mir alle Funktionen in einem Stapel die beim Debuggen zur aktuellen Zeile aktiv sind. So kann ich gezielt die aktiven Funktionen anspringen.

lg
Gerold
:-)

Re: Python-Code tracen

Verfasst: Donnerstag 8. November 2007, 20:53
von Leonidas
gerold hat geschrieben:Ich weiß vielleicht nicht ganz was du meinst. So etwas wie einen Call-Stack? Im WingIDE kann ich einen Call-Stack einblenden. Der zeigt mir alle Funktionen in einem Stapel die beim Debuggen zur aktuellen Zeile aktiv sind. So kann ich gezielt die aktiven Funktionen anspringen.
Ja, so in etwa - ich hätte gerne eine Übericht, welche Funktion welche aufgerufen hat und in welcher Reihenfolge.
WingIDE fällt weg, da ich eine Lösung möchte, die nicht grafisch ist, also auch in meinem SSH-Fenster funktioniert.

Bin grade dabei, da selbst was zu implementieren, habe aber gerade noch einige Probleme mit dem `sys.settrace`-Hook.

Verfasst: Donnerstag 8. November 2007, 20:59
von BlackJack
Hm, dann fällt Python Call Graph wohl weg.

Verfasst: Donnerstag 8. November 2007, 22:15
von Leonidas
BlackJack hat geschrieben:Hm, dann fällt Python Call Graph wohl weg.
Ja. Allerdings bin ich bald so weit, dass ich meinen eigenen Tracer verwenden kann.

Seine Ausgabe im Moment:

Code: Alles auswählen

 | ? (file dresden.py)
  | ? (file lexer.py)
  | ? (file parser.py)
   | ? (file ast.py)
    | ASTNode (file ast.py)
    | Program (file ast.py)
    | AbstractClass (file ast.py)
    | MainClass (file ast.py)
    | ClassDecl (file ast.py)
    | VarDecl (file ast.py)
    | MethodDecl (file ast.py)
    | FormalList (file ast.py)
    | FormalRest (file ast.py)
    | Type (file ast.py)
    | Statement (file ast.py)
    | Exp (file ast.py)
    | ExpList (file ast.py)
    | ExpRest (file ast.py)
    | TreeDumper (file ast.py)
  | main (file dresden.py)
Er ist wesentlich simpler als alle anderen Tracer die ich bisher gefunden habe und lässt sich ähnlich verwenden wie der in der Stdlib mitgelieferte Tracer. Es fehlt eigentlich hauptsächlich Handling für Commandline-Argumente.

Verfasst: Freitag 9. November 2007, 12:29
von Jona
BlackJack hat geschrieben:Hm, dann fällt Python Call Graph wohl weg.
das ist ja mal ein schickes tool :)

hast du noch mehr so musthaves von denen ich nichts weiss?

Verfasst: Samstag 10. November 2007, 16:52
von gecko
Hi,

geht es um Offline oder Realtime? Deine Implementierung wäre doch auch sehr interessant zur Einbindung in einen Editor. Es müsste doch schon andere geben die in der Hinsicht etwas gemacht haben.

Verfasst: Samstag 10. November 2007, 18:31
von Leonidas
gecko hat geschrieben:geht es um Offline oder Realtime? Deine Implementierung wäre doch auch sehr interessant zur Einbindung in einen Editor. Es müsste doch schon andere geben die in der Hinsicht etwas gemacht haben.
Hängt ab, wie du Offline oder Realtime definierst. Es zeigt den Tree zur Laufzeit an, funktioniert in der Regel ganz gut, außer dass es manchmal Exceptions verschluckt.

Für Interessierte habe ich die aktuelle Version mal gepastet. Meine Motivation ist Momentan aber recht gering, da groß noch etwas zu machen, denn es ist nur als eine Art Seiteneffekt entstanden. Ich kann damit das tracen was ich brauche, das was nicht funktioniert stört mich momentan auch nicht sonderlich. Wenn jemand Patches hat, nehme ich die aber dennoch gerne an. Besonders das Exception-Problem ist etwas ärgerlich (nur nicht ausreichend ärgerlich, damit ich da jetzt wieder Zeit zum Debuggen investiere, die ich für das Hauptprojekt brauche, für die der Tracer eigentlich geschrieben wurde).