встановлення точок зупинки за допомогою носових тестів - опція pdb


88

nosetests --pdbдозвольте мені зупинитися на помилці чи помилці, але це занадто пізно для моїх потреб. Проходження коду під час виконання допомагає мені налагодити де проблема.

Однак носові тести корисні, оскільки дозволяють проводити тести, які покладаються на відносний імпорт (тобто тести в пакеті).

Як я можу встановити точки зупинки до виконання тестів? В даний час я використовую:

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

Це рішення не є адекватним. Нотетести заважають виводити дані у форматі pdb, і мої елементи управління на клавіатурі (наприклад, клавіші зі стрілками) не працюють.

Використання імпорту pdb; pdb.set_trace (), здавалося б, непогана ідея, проте тести носа блокують мій доступ до консолі pdb.

Відповіді:


120

Ви можете додати

import pdb; pdb.set_trace() 

де завгодно у вашому джерелі, яке ви хочете зупинити в налагоджувачі.

Переконайтеся, що ви проходите -sдо носа, щоб він не захопив stdout.


Я якраз збирався додати це до свого запитання. Це також не є прийнятним рішенням. При використанні цього з носовими тестами очевидно, що це буквально непридатне, оскільки доступ до консолі pdb перевіряється, і жодні команди pdb не можуть бути виконані.
Девін

26
Додайте прапор -s до тестів носа, щоб запобігти захопленню stdout, і ви зможете використовувати pdb чудово.
Ned Batchelder

1
Не працює. Використовуйте це:from nose.tools import set_trace; set_trace()
anilbey

143

Навіть краще, ніж пам’ятати про використання, -sце використовувати той set_traceваріант, який поставляється з носом. Додати

from nose.tools import set_trace; set_trace()

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


Чи є якась документація щодо цього? Як вийти з циклу?
AJ

Ви маєте на увазі, як орієнтуватися після pdbзапуску? Я впевнений, що документи є, але вгорі моєї голови - s"входить" у виклик функції, nпереходить до оператора "next", uрухається "вгору" у стеці і dрухається "вниз". Ви можете використовувати bдля встановлення точок зупинки і cдля "продовження" та виходу з покрокового налагоджувача. Сподіваюся, це допоможе!
Matt Luongo

4
Це має бути прийнятою відповіддю. Він надає всі звичайні функції початкової команди pdb.set_trace ().
tbm

Будь-яка можливість для версії ipython / ipdb?
Герріт

5

Якщо у вас є ipython , для необмеженої дивовижності використовуйте:

import ipdb; ipdb.set_trace() 

* необмежена дивовижність: як і ipython - автозаповнення, забарвлення тощо.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.