2011-02-09 9 views
68

Nosetests --pdb, позвольте мне остановиться на ошибке или сбое, но это слишком поздно для моих нужд. Выполнение кода во время выполнения помогает мне отлаживать, где проблема.установка контрольных точек с nosetests - опция pdb

Однако носитеты полезны, так как они позволяют проводить тесты, которые зависят от относительного импорта (т. Е. Тестов в пакете).

Как установить контрольные точки перед выполнением тестов? В настоящее время я использую:

python -m pdb /path/to/my/nosetests testfile.py 

Это решение не является адекватным. Nosetests мешают выходу pdb, а мои клавиши управления клавиатурой (например, клавиши со стрелками) сломаны.

Использование импорта pdb; pdb.set_trace() может показаться хорошей идеей, однако nosetests блокирует мой доступ к консоли pdb.

ответ

92

Вы можете добавить

import pdb; pdb.set_trace() 

в любом месте вашего источника, который вы хотите, чтобы остановить в отладчике.

Удостоверьтесь, что вы прошли -s в нос, чтобы он не захватил stdout.

+0

Я был просто добавить это к моему вопросу. Это тоже не приемлемое решение. При использовании этого с nosetests, это очевидно, что это буквально непригодно, поскольку доступ к консоли pdb экранирован, и никакие команды pdb не могут быть выполнены. – Devin

+14

Добавьте флаг -s в nosetests, чтобы предотвратить его запись stdout, и вы сможете использовать pdb просто отлично. –

+1

Это не полезно для точек останова. – SkyLeach

118

Даже лучше, чем использовать -s, является использование варианта set_trace, который поставляется с Носом. Добавить

from nose.tools import set_trace; set_trace() 

Где бы вы ни хотели вступить в отладчик. Перенаправление stdin/out будет позаботиться о вас. Единственный странный побочный эффект, с которым я столкнулся, заключается в невозможности перезапуска вашего кода из pdb (используя run) во время отладки во время ночного запуска.

+0

@ Devin любой шанс, это решило вашу проблему? –

+6

Это полностью сработало для меня. :) Спасибо Мэтту! – bitcycle

+0

Есть ли какая-либо документация по этому вопросу? Как выйти из цикла? – Clayton

1

Если у вас есть IPython, для неограниченного использования AWESOMENESS:

import ipdb; ipdb.set_trace() 

 Смежные вопросы

  • Нет связанных вопросов^_^