Python-Code tracen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Donnerstag 8. November 2007, 17:35

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?
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Donnerstag 8. November 2007, 20:23

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Donnerstag 8. November 2007, 20:53

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.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Donnerstag 8. November 2007, 22:15

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.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Jona
User
Beiträge: 94
Registriert: Sonntag 23. September 2007, 23:25

Freitag 9. November 2007, 12:29

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?
gecko
User
Beiträge: 47
Registriert: Samstag 9. Juni 2007, 10:48

Samstag 10. November 2007, 16:52

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.
Hi! I'm a .signature virus! copy me into your .signature file to help me spread!
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Samstag 10. November 2007, 18:31

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).
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Antworten