• [^] # Re: Avantage

    Posté par . En réponse à la dépêche Publication de la version 2009Q2 de Unladen Swallow. Évalué à 5.

    (Il existe un débuggeur ligne par ligne en python ? Un gdb pour python, en fait)

    oui ça s'appelle pdb (c'est un module).

    L'utilisation courante est d'insérer dans ton code une ligne:
    import pdb; pdb.set_trace()

    Sinon tu peux aussi le lancer avec une traceback (en post-mortem).

    Il y des environnements qui font ça pour toi.
    Dans les framework web (pylons, werkzeug, zope avec pdbdebugmode) c'est avec ça qu'est fait la console de debug en cas d'exception non interceptée.

    en gros pour l'interception automatique ça revient à ça:

    try:
    my_func(...)
    except SystemExit:
    raise # Reraise the system exit exception
    except Exception, error:
    from sys import exc_info
    import pdb
    pdb.post_mortem(exc_info()[2])
    raise


    enfin avec un shell lancé depuis emacs, celui-ci peut reconnaitre l'arrivée sur une ligne pdb et affiche le code source de la frame en cours dans un autre panneau.