точки останова pydev не работают

Я работаю над проектом с использованием python 2.7.2, sqlalchemy 0.7, unittest, eclipse 3.7.2 и pydev 2.4. Я устанавливаю точки останова в файлах python (файлы модульных тестов), но они полностью игнорируются (раньше в какой-то момент они работали). К настоящему времени я обновил все связанное программное обеспечение (см. Выше), начал новые проекты, поиграл с настройками, загипнотизировал мой экран, но ничего не работает.

Единственная идея, которую я получил из некоторого сообщения, это то, что он имеет какое-то отношение к изменению некоторых имен файлов .py на нижний регистр.

Есть ли у кого-нибудь идеи?

​​добавлено: Я даже установил версию eclipse aptana и скопировал в нее файлы .py => тот же результат; точки останова по-прежнему игнорируются.

все еще нет прогресса: I изменили код, который мог показаться необычным, и заменили его более простым решением.

дополнительная информация: это, вероятно, как-то связано с модулем 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) ... 

Остальное - вывод модульного теста.

Продолжая ответ Фабио, часть 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 __ одного из моих собственных классов, производному от класса declarative_base () sqlalchemy.

Вероятно, решено (хотя и не понято):

Проблема заключалась в том, что __ getattr __ , упомянутый выше, создал нечто похожее на бесконечную рекурсию, однако программа / unittest / sqlalchemy восстановилась без сообщения об ошибке. Я недостаточно понимаю код sqlalchemy, чтобы понять, почему был вызван метод __ getattr __ .
Я изменил метод __ getattr __ , чтобы вызвать super для имени атрибута, для которого произошла рекурсия (скорее всего, не мое окончательное решение), и проблема с точкой останова, похоже, исчезла. Если я смогу кратко сформулировать проблему, я, вероятно, попытаюсь получить дополнительную информацию в группе новостей google sqlalchemy или, по крайней мере, проверить свое решение на надежность.

Спасибо, Фабио, за вашу поддержку, функция trace_func () выявила мне проблему.

22
задан Lars 4 March 2012 в 11:46
поделиться