2015-03-14 6 views
2

Я новичок в использовании IPDB и следуя примерам добавилиIPDB/set_trace() висит

print "I see this print statement\n" 
foo="bar" 
import ipdb 
ipdb.set_trace() 
print "Never see this statement because program hangs: 
print "But if the prior two debugging lines were removed it DOES show up" 

в точке внутри моего кода задолго до раздела, который имеет некоторые проблемы данных. Добавляя этот код, моя программа просто зависает: никаких операторов печати, точек останова и только способ продолжения - нажать control-c.

Что может быть здесь?

ОБНОВЛЕНИЕ Я выключил/перезапустил ipython. Это очистили что-то вверх: теперь я могу попасть в IPDB быстрой

Однако, когда я пытаюсь напечатать любую переменную она по-прежнему нависает:

ipdb. print foo 
+0

Возможно, вы можете скопировать-вставить вызов, который запускает ваш скрипт, и включить строки, в которые вы вводите отладчик, и попытались выполнить любую из [типичных команд отладки] (https://pythonconquerstheuniverse.wordpress.com/2009/09/ 10/debugging-in-python /), например 'p'rint. Просто так мы не догадываемся, что вы подразумеваете под «никакими заявлениями печати» ... –

+0

Спасибо, я не могу скопировать код - по разным причинам. Невозможно выполнить команду ANY, потому что программа зависает. Программа выполнялась (хотя и с неправильными результатами), пока я не добавил точно две строки в OP. Я также вижу нормальные операторы печати * перед * командой отладки, но ничего * после * это. – javadba

+0

['ipdb'] (https://pypi.python.org/pypi/ipdb), по-видимому, является отладчиком python, предназначенным для использования в комбинации с iPython. Это предназначено? Вы не ищете просто 'pdb'? –

ответ

0

Я это постоянно случается в моей команде, потому что все наших AWS-экземпляров смонтировали общие домашние каталоги через NFS. SQLite имеет некоторые проблемы, когда файл находится в файловой системе NFS. ipython (и ipdb) использует sqlite за кулисами.

Путь базы данных sqlite для ipython - ~/.ipython/profile_default/history.sqlite.

Моим решением было заменить этот файл символической ссылкой на пустой файл в/var/tmp.

+0

Спасибо за эту мысль. Это просто работает на ноутбуке Mac. – javadba