2009-12-04 5 views

Répondre

1

Vous pouvez utiliser l'autre débogueur pydb. Vous pouvez l'appeler avec pydb --fntrace --batch <scriptname> pour obtenir une trace de fonction. En ce qui concerne le "clignotement", utilisez les outils habituels comme Ctrl-S/Ctrl-Q sur un terminal ANSI, ou redirigez vers un fichier.

+0

Je pense que ce débogueur peut faire le travail que pdb ne peut pas faire! J'ai trouvé un bon tutoriel sur showmedo.com/videotutorials/.... Voyez la fonctionnalité "set linetrace delay 0.35" au milieu. Merci – citn

2

Si vous souhaitez surveiller quand quelques fonctions particulières sont appelées, vous pouvez utiliser ce décorateur:

import functools 
def trace(f): 
    @functools.wraps(f) 
    def wrapper(*arg,**kw): 
     '''This decorator shows how the function was called''' 
     arg_str=','.join(['%r'%a for a in arg]+['%s=%s'%(key,kw[key]) for key in kw]) 
     print "%s(%s)" % (f.__name__, arg_str) 
     return f(*arg, **kw) 
    return wrapper 

On peut l'utiliser comme ceci:

@trace   # <--- decorator your functions with the @trace decorator 
def foo(x,y): 
    # do stuff 

Lorsque vous exécutez votre programme, à chaque fois que foo (x, y) est appelé, vous verrez l'appel de fonction avec la valeur de ses arguments dans la console:

foo(y=(0, 1, 2),x=(0, 0, 0)) 
+0

Fonctionnalité intéressante. Dans quelles versions de Python pouvez-vous faire cela? – citn

+1

Les décorateurs ont été introduits en 2.4, et functools a été introduit en 2.5. Il existe une autre façon d'écrire le décorateur de traces qui ne dépend pas de functools: Voir http://pypi.python.org/pypi/decorator#a-trace-decorator – unutbu

Questions connexes