2009-10-21 5 views
5

Est-il possible d'utiliser la fonction setTrace() dans un script qui n'a pas de définition de la méthode? à savoirsetTrace() en Python

for i in range(1, 100): 
    print i 

def traceit(frame, event, arg): 
    if event == "line": 
     lineno = frame.f_lineno 
     print "line", lineno 

return traceit 

sys.settrace(traceit) 

donc idéalement je ne voudrais la fonction de trace à être appelé à chaque itération/ligne de code exécuté dans la boucle. Je l'ai fait avec des scripts qui ont eu des définitions de méthode avant, mais je ne suis pas sûr de savoir comment cela fonctionne dans ce cas.

Répondre

2

settrace() est vraiment uniquement destiné à la mise en œuvre débogueurs. Si vous utilisez pour déboguer ce programme, vous pouvez être mieux en utilisant l'APB

Selon la documentation, settrace() ne fera pas ce que vous voulez. Si vous voulez vraiment effectuer ce traçage ligne par ligne, jetez un coup d'œil sur le paquetage du compilateur qui vous permet d'accéder et de modifier l'arbre de syntaxe abstraite AST produit par le compilateur Python. Vous devriez pouvoir utiliser cela pour insérer des appels à une fonction qui suit l'exécution.

2

J'utilise une seule ligne simple de syntaxe pour les gouverner tous:

import pdb; pdb.set_trace() 

Mettez-le là où vous voulez interrompre l'exécution et démarrer le débogage. Utilisez les commandes pdb (n pour next, l pour list, etc).

Cheers,

H.