Я работаю над проектом, использующим python 2.7.2, sqlalchemy 0.7, unittest, eclipse 3.7.2 и pydev 2.4. Я устанавливаю точки останова в файлах Python (файлы модульного тестирования), но они полностью игнорируются (раньше, в какой-то момент, они работали). К настоящему времени я обновил все связанное программное обеспечение (см. Выше), запустил новые проекты, поиграл с настройками, загипнотизировал мой экран, но ничего не работает.
Единственная идея, которую я получил из некоторого поста, заключается в том, что он имеет какое-то отношение к изменению некоторых имен файлов .py в нижний регистр.
У кого-нибудь есть идеи?
добавлено: Я даже установил версию eclipse для aptana и скопировал туда файлы .py
=> тот же результат; Точки останова по-прежнему игнорируются.
все еще нет прогресса: Я изменил код, который может показаться необычным, и заменил его более простым решением.
дополнительная информация: это, вероятно, связано с модулем unittest:
- Точки останова в моих файлах, определяющие наборы тестов, работают,
- Точки останова в стандартных файлах unittest сами работают
- точки останова в моих методах тестирования в классах, полученных из unittest.TestCase не работают
- контрольные точки в моем коде, тестируемые в тестовых примерах, не работают
- в какой-то момент, прежде чем я смог определить рабочие точки останова в методах тестирования или тестируемом коде
- некоторые вещи, которые я изменил после этого: начали использовать наборы тестов, изменили некоторые имена файлов на строчные, ...
- эта проблема также возникает, если мой код работает без исключений или сбоев тестирования.
я уже пробовал:
- удалить
.pyc
файлы
- определить новый проект и скопировать в него только
.py
файлов
- перезагружался несколько раз между
- улучшено до затмения 3.7.2
- установил последний pydev на затмение 3.7.2
- переключиться на aptana (и обратно)
- удален код, который «вручную» добавил классы в мой модуль
- возился с некоторыми конфигурациями
что я еще могу сделать:
- начать новый проект с моим кодом, начать удалять / изменять код до тех пор, пока не сработают точки останова, и выяснить, не относится ли это к какой-либо части моего кода
- Кто-нибудь знает, что может вызвать эти проблемы или как их можно решить?
- Есть ли другое место, где я мог бы найти решение?
- Разработчики pydev изучают вопросы по stackoverflow?
- Есть ли более старая версия pydev, которую я мог бы попробовать?
Я давно работаю с pydev / eclipse, и он хорошо работает для меня, но без отладки я вынужден был переключить IDE.
В ответ на вопросы Фабио ниже:
- Версия Python: 2.7.2,
- sys.gettrace не дает None (но я не знаю, что в моем коде может повлиять на это)
- Это вывод отладчика после изменения предложенных параметров:
Отладчик pydev:
starting
('Executing file ', 'D:\\.eclipse\\org.eclipse.platform_3.7.0_248562372\\plugins\\org.python.pydev.debug_2.4.0.2012020116\\pysrc\\runfiles.py')
('arguments:', "['D:\\\\.eclipse\\\\org.eclipse.platform_3.7.0_248562372\\\\plugins\\\\org.python.pydev.debug_2.4.0.2012020116\\\\pysrc\\\\runfiles.py', 'D:\\\\Documents\\\\Code\\\\Eclipse\\\\workspace\\\\sqladata\\\\src\\\\unit_test.py', '--port', '49856', '--verbosity', '0']")
('Connecting to ', '127.0.0.1', ':', '49857')
('Connected.',)
('received command ', '501\t1\t1.1')
sending cmd: CMD_VERSION 501 1 1.1
sending cmd: CMD_THREAD_CREATE 103 2 <xml><thread name="pydevd.reader" id="-1"/></xml>
sending cmd: CMD_THREAD_CREATE 103 4 <xml><thread name="pydevd.writer" id="-1"/></xml>
('received command ', '111\t3\tD:\\Documents\\Code\\Eclipse\\workspace\\sqladata\\src\\testData.py\t85\t**FUNC**testAdjacency\tNone')
Added breakpoint:d:\documents\code\eclipse\workspace\sqladata\src\testdata.py - line:85 - func_name:testAdjacency
('received command ', '122\t5\t;;')
Exceptions to hook : []
('received command ', '124\t7\t')
('received command ', '101\t9\t')
Finding files... done.
Importing test modules ... testAtomic (testTypes.TypeTest) ... ok
testCyclic (testTypes.TypeTest) ...
Остальное выводится из модульного теста.
Продолжая ответ Фабио, часть 2:
Я добавил код в начале программы, и отладчик перестает работать в последней строке следующего метода в sqlalchemy \ orm \ attribute.py (это дескриптор, но каким образом он мешает отладке) вне моего текущего знания):
Класс InstrumentedAttribute (QueryableAttribute):
"" "Связанный с классом инструментальный атрибут, который добавляет методы дескриптора." ""
def __set__(self, instance, value):
self.impl.set(instance_state(instance),
instance_dict(instance), value, None)
def __delete__(self, instance):
self.impl.delete(instance_state(instance), instance_dict(instance))
def __get__(self, instance, owner):
if instance is None:
return self
dict_ = instance_dict(instance)
if self._supports_population and self.key in dict_:
return dict_[self.key]
else:
return self.impl.get(instance_state(instance),dict_) #<= last line of debugging
Оттуда отладчик входит в метод __getattr__
одного из моих собственных классов, производных от класса sqlalchemy Declarative_base ().
Вероятно, решено (хотя и не понято):
Проблема, похоже, заключалась в том, что упомянутый выше __getattr__
создал нечто, похожее на бесконечную рекурсию, однако программа / unittest / sqlalchemy восстановилась без сообщения об ошибке.Я недостаточно разбираюсь в коде sqlalchemy, чтобы понять, почему был вызван метод __getattr__
.
Я изменил метод __getattr__
для вызова super для имени атрибута, для которого произошла рекурсия (скорее всего, не мое окончательное решение), ипроблема точки останова, кажется, ушла.Если я смогу сформулировать проблему в краткой форме, я, возможно, постараюсь получить больше информации о новостной группе Google sqlalchemy или, по крайней мере, проверить мое решение на надежность.
Спасибо, Фабио, за поддержку, trace_funcФункция () выявила проблему для меня.