2010-04-08 7 views
2

J'implémente un système "breakpoint" à utiliser dans mon développement Python qui me permettra d'appeler une fonction qui, par essence, appelle pdb.set_trace();Python (pdb) - Mise en file d'attente des commandes à exécuter

Certaines des fonctionnalités que je voudrais implémenter nécessitent que je contrôle pdb à partir du code tandis que Je suis dans un contexte set_trace.

Exemple:

disableList = [] 
def breakpoint(name=None): 
    def d(): 
     disableList.append(name) 
     #**** 
     #issue 'run' command to pdb so user 
     #does not have to type 'c' 
     #**** 

    if name in disableList: 
     return 

    print "Use d() to disable breakpoint, 'c' to continue" 
    pdb.set_trace(); 

Dans l'exemple ci-dessus, comment puis-je mettre les commentaires par le #**** démarqués?

Dans d'autres parties de ce système, je voudrais émettre une commande 'up', ou deux commandes séquentielles 'up' sans quitter la session pdb (donc l'utilisateur finit à une invite pdb mais deux niveaux sur le pile d'appel).

Répondre

4

Vous pouvez appeler des méthodes de niveau inférieur pour obtenir plus de contrôle sur le débogueur:

def debug(): 
    import pdb 
    import sys 

    # set up the debugger 
    debugger = pdb.Pdb() 
    debugger.reset() 

    # your custom stuff here 
    debugger.do_where(None) # run the "where" command 

    # invoke the interactive debugging prompt 
    users_frame = sys._getframe().f_back # frame where the user invoked `debug()` 
    debugger.interaction(users_frame, None) 

if __name__ == '__main__': 
    print 1 
    debug() 
    print 2 

Vous pouvez trouver de la documentation pour le module pdb ici: http://docs.python.org/library/pdb et pour l'interface de débogage de niveau inférieur bdb ici: http://docs.python.org/library/bdb. Vous pouvez également regarder leur code source.

Questions connexes