2011-12-02 2 views
2

J'ai un programme Python avec une fonction foo() dedans.Python + PDB: comment s'arrêter au point d'arrêt dans une fonction appelée depuis PDB?

Je lance le programme avec PDB et s'arrête à un point d'arrêt arbitraire quelque part dans le programme.

Maintenant, il est facile pour moi d'appeler foo() dans l'APB, je viens de taper:

!foo() 

et exécute foo. Dès qu'il se termine, il revient à PDB, et j'attends toujours à la ligne d'origine mon programme était avant.

Mais maintenant, disons que je veux que PDB s'arrête à un point d'arrêt au sein de toto. Je place un point d'arrêt dans mon fichier source sur la première ligne de foo(), puis j'exécute! Foo(). Mais PDB ne s'arrête pas au point d'arrêt.

Il semble seulement s'arrêter là si foo() est appelé depuis le programme, pas depuis la ligne de commande de PDB pendant que le programme est en cours d'exécution.

Est-ce que quelqu'un sait quelque chose autour de ça? J'ai recherché la documentation PDB et Google en vain.

(La raison pour laquelle je dois faire ceci est parce que mon programme prend une heure pour lire toutes les données nécessaires pour démarrer, et je dois pouvoir déboguer autant que possible dans une seule session de débogage, plutôt que simplement l'ajout de points d'arrêt et la réexécution du programme: la flexibilité de l'appel interactif des fonctions et de leur débogage serait extrêmement utile.)

+0

Vous pouvez définir des points d'arrêt lors d'une session si vous connaissez les numéros de téléphone. Je ne suis pas assez bien informé pour savoir quoi faire si vous utilisez plusieurs fichiers ... En outre, je ne sais pas si PDB est assez intelligent pour respecter ces points d'arrêt si vous exécutez cette fonction au milieu de une session comme vous êtes –

+0

Je ne sais pas si PDB peut le faire. Quoi qu'il en soit, si vous pensez qu'à un certain moment votre programme est prêt à appeler foo() pour le débogage, il vous suffit de modifier le code source pour l'appeler, de déboguer le problème et de supprimer cet appel supplémentaire après avoir corrigé le problème. – jcollado

Répondre