web-dev-qa-db-fra.com

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

J'exécute une série de tests (fichiers .py) à l'aide de nosetest. En utilisant un classique

import pdb; pdb.set_trace()

les tests nasaux ne s'achèvent jamais. Il se bloque là où le point d'arrêt a été défini, mais ne tombe jamais dans le débogueur pdb.

Des idées pourquoi ce serait? J'ai essayé de déplacer le point d'arrêt vers un certain nombre de positions différentes (autres fonctions de test, autres fichiers), mais en vain.

53
Bodhi

Exécutez nez avec l'option -s/--nocapture et vous pourrez voir l'invite pdb et interagir normalement avec le débogueur.

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

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

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

Nose peut le faire pour vous si vous utilisez:

from nose.tools import set_trace; set_trace()

au lieu de:

import pdb;pdb.set_trace()
31
Joe L.

Dans mon cas, le drapeau drapeau -s/- - nocapture, ne l'a toujours pas résolu et laisse tomber le compilateur dans pdb.

Une autre raison pour laquelle vous pourriez regarder en est si vous utilisez une base de données comme MySQL dans le cadre de vos tests, que ce n'est pas verrouillé par un autre processus simultané. Dans mon cas, j'avais démarré 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 nasaux étaient suspendus - pas de course/sortie.

Je tuais les processus de python qui ont été Enfermer les tables et Nose était de retour renifler

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

0
jetpackdata.com