Möglichkeit ein Programm zeilenweise auszuführen

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
qweet
User
Beiträge: 119
Registriert: Freitag 2. September 2005, 21:26

Hallo,

Ich hab jetzt ein größeres Programm geschrieben und habe jetzt darin einen logischen Fehler. Das Programm macht einfach nicht was es soll. Ich find den aber leider nicht.

Gibt es irgend eine Möglichkeit das Programm zeilenweise auszuführen? Ich hab keine wirklich Lust, jede Zeile in IDLE hinein zu kopieren.
Außerdem würde das auch gar nicht funktionieren, da ich WConio benutze.

Oder gibts vielleicht was, dass ich Variablen überwachen kann während des Programmablaufs?

mfg,
qweet
Benutzeravatar
Masaru
User
Beiträge: 425
Registriert: Mittwoch 4. August 2004, 22:17

Ich glaube, der Python Debugger (kurz: pdb) könnte dir da weiterhelfen.

Der pdb ist ein Standardmodul (sowohl in 2.3 wie auch in 2.4), kannst du also ohne weitere Installationen importieren.

Ich entwickel auch gerade eine Shell-Erweiterung, welche ich mal im Aufruf wie folgt angepasst haben:

Code: Alles auswählen


def main():
     # hier steht mein regulärer Shell-Code

if __name__ == '__main__':
    import pdb
    pdb.run('main()')    # pdb.run erwartet einen "string" als Parameter 
    #main()                 #<- auskommentiert 
Wenn ich dann die Shell starte, springt er sofort in den pdb:

Code: Alles auswählen

C:\_WORK_\prog_snippets\python>shell.py
> <string>(1)?()
(Pdb) s
--Call--
> c:\_work_\prog_snippets\python\shell.py(50)main()
-> def main():
(Pdb) l
 45             sys.exit('error')
 46
 47         return (True, None)
 48
 49
 50  -> def main():
 51         exit_code = None
 52         #WConio.clrscr()
 53         #WConio.textattr(WConio.YELLOW)
 54         while 1:
 55             (run_user_code, exit_code) = do_run_user_code()
(Pdb)_
Mit dem ersten pdb-Command "s" (step in) springe ich in die Methode, und mit "l" zeige ich mir gerade die Position im Quellcode (+/- 5 Zeilen drumherrum) an.

>>Masaru<<
Zuletzt geändert von Masaru am Dienstag 20. September 2005, 19:38, insgesamt 1-mal geändert.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Was du willst ist ein Debugger wie der textorientierte Python debugger oder der grafische Winpdb (und HAP Debugger gibt's auch).

Jedoch ist debuggen eine Kunst für sich :)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
Masaru
User
Beiträge: 425
Registriert: Mittwoch 4. August 2004, 22:17

... jupp, das stimmt.

Gerade der textorientierte *g*. Man braucht etwas Zeit, um sich einzuwurschteln.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Leonidas hat geschrieben:oder der grafische Winpdb
Lustig ist ja die Warnung auf der Homepage:
Don't try Winpdb on scripts that import PSYCO or a profiler of any kind, or your machine will explode to tiny little pieces.
:lol:

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

jens hat geschrieben:Lustig ist ja die Warnung auf der Homepage:
Don't try Winpdb on scripts that import PSYCO or a profiler of any kind, or your machine will explode to tiny little pieces.
:lol:
Ja, wäre mal lustig das auszuprobieren, hehe. Aber wer profilt und debuggt seine Programme denn gleichzeitig? Das ist ja premature optimalization, ich hätte lieber ein Programm das fehlerfrei ist, statt schnell und buggy. :lol:
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
qweet
User
Beiträge: 119
Registriert: Freitag 2. September 2005, 21:26

danke leute. :) Hab jetzt Winpdb benutzt und meinen Fehler gefunden :) Yeephee :) Aber ich werd mich wohl noch ein bischen reinwurschteln müssen ;)

mfg,
qweet
backarc

Versuchs mal mit Boa Constructor - ist ne komplette IDE - der Debugger ist auch ganz OK wenn sich mal dran gewöhnt hat.
Antworten