54 votes

pdb.set_trace() cause des nosetests gelés, ne passe pas dans le débogueur

J'exécute une suite de tests (fichiers .py) en utilisant nosetests. En utilisant un

import pdb; pdb.set_trace()

l'exécution de nosetests ne se termine jamais. Elle se bloque à l'endroit où le point d'arrêt a été fixé, mais ne passe jamais dans le débogueur pdb.

Vous avez une idée de la raison de cette situation ? J'ai essayé de déplacer le point d'arrêt à un certain nombre de positions différentes (autres fonctions de test, autres fichiers), sans succès.

58voto

Mike Steder Points 4309

Run nose avec le -s / --nocapture et vous serez en mesure de voir l'invite pdb et d'interagir avec le débogueur normalement.

Si vous utilisez la ligne de commande, cela signifie :-

python manage.py  test -s [other-opts-and-args]

34voto

Joe L. Points 1020

Le nez capte la sortie et la redirige. Ainsi, le point d'arrêt est atteint, mais vous ne le voyez pas. Vous devez désactiver la redirection de la sortie pour que la sortie de débogage apparaisse à l'écran.

Nose peut le faire pour vous, si vous l'utilisez :

from nose.tools import set_trace; set_trace()

au lieu de :

import pdb;pdb.set_trace()

0voto

Shankar Points 338

Dans mon cas le flag -s/--nocapture, ne l'a toujours pas résolu et fait tomber le compilateur en pdb.

Si vous utilisez une base de données telle que MySQL dans le cadre de vos tests, vous pouvez également vous assurer qu'elle n'est pas verrouillée par un autre processus simultané. Dans mon cas, j'avais lancé un shell python pour interroger la base de données MySQL via SQL Alchemy et cela avait verrouillé les tables. En conséquence, mes tests de nez étaient suspendus - ils ne fonctionnaient pas/ne sortaient pas.

J'ai tué les processus python qui bloquaient les tables et Nose était de retour pour renifler.

> $ ps auxww | grep python | awk '{print $2}' | sudo xargs kill -9

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X