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