Я работаю над проектом с использованием python 2.7.2, sqlalchemy 0.7, unittest, eclipse 3.7.2 и pydev 2.4. Я устанавливаю точки останова в файлах python (файлы модульных тестов), но они полностью игнорируются (раньше в какой-то момент они работали). К настоящему времени я обновил все связанное программное обеспечение (см. Выше), начал новые проекты, поиграл с настройками, загипнотизировал мой экран, но ничего не работает.
Единственная идея, которую я получил из некоторого сообщения, это то, что он имеет какое-то отношение к изменению некоторых имен файлов .py на нижний регистр.
Есть ли у кого-нибудь идеи?
добавлено: Я даже установил версию eclipse aptana и скопировал в нее файлы .py
=> тот же результат; точки останова по-прежнему игнорируются.
все еще нет прогресса: I изменили код, который мог показаться необычным, и заменили его более простым решением.
дополнительная информация: это, вероятно, как-то связано с модулем unittest:
то, что я уже пробовал:
.pyc
файлы .py
файлы что я все еще могу сделать, это:
Я давно работаю с pydev / eclipse, и у меня он работает хорошо, но без отладки мне пришлось переключить IDE.
В ответ на вопросы Фабио ниже:
отладчик 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) ...
Остальное - вывод модульного теста.
Я добавил код в начале программы, и отладчик перестает работать на последней строке следования методу в sqlalchemy \ orm \ attributes.py (это дескриптор , но то, как это мешает отладке, мне неизвестно):
class 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 __
одного из моих собственных классов, производному от класса declarative_base () sqlalchemy.
Проблема заключалась в том, что __ getattr __
, упомянутый выше, создал нечто похожее на бесконечную рекурсию, однако программа / unittest / sqlalchemy восстановилась без сообщения об ошибке. Я недостаточно понимаю код sqlalchemy, чтобы понять, почему был вызван метод __ getattr __
.
Я изменил метод __ getattr __
, чтобы вызвать super для имени атрибута, для которого произошла рекурсия (скорее всего, не мое окончательное решение), и проблема с точкой останова, похоже, исчезла.
Если я смогу кратко сформулировать проблему, я, вероятно, попытаюсь получить дополнительную информацию в группе новостей google sqlalchemy или, по крайней мере, проверить свое решение на надежность.
Спасибо, Фабио, за вашу поддержку, функция trace_func () выявила мне проблему.