Python 36 (Eclipse Oxygen, PyDev) падает при достижении точки останова - PullRequest
0 голосов
/ 08 мая 2018

Python 36 (в Windows 7, последняя версия Anaconda с Python 36 под последней версией Eclipse Oxygen) падает каждый раз, когда достигает точки останова.Ошибка является «классической» ошибкой указателя NULL.

Unhandled exception at 0x000000001D8CF76D (python36.dll) in python.exe: 0xC0000005: Access violation reading location 0xFFFFFFFFFFFFFFFF.

(верхняя часть) трассировки стека выглядит следующим образом:

>   python36.dll!PyType_IsSubtype(_typeobject * a, _typeobject * b) Line 1358   C
    sip.pyd!000007fec602092d()  Unknown
    sip.pyd!000007fec6020897()  Unknown
    QtGui.pyd!000007fec6649d02()    Unknown
    python36.dll!_PyImport_LoadDynamicModuleWithSpec(_object * spec, _iobuf *) Line 160 C
    python36.dll!_imp_create_dynamic_impl(_object * spec, _object * file, _object *) Line 1984  C
    python36.dll!_imp_create_dynamic(_object * module, _object * args) Line 289 C
    python36.dll!_PyEval_EvalFrameDefault(_frame * f, int throwflag) Line 3391  C
    pydevd_frame_evaluator.cp36-win_amd64.pyd!000007fed57869ac()    Unknown
    python36.dll!_PyEval_EvalCodeWithName(_object * _co, _object * globals, _object * locals, _object * * args, __int64 argcount, _object * * kwnames, _object * * kwargs, __int64 kwcount, int kwstep, _object * * defs, __int64 defcount, _object * kwdefs, _object * closure, _object * name, _object * qualname) Line 4153  C
    python36.dll!call_function(_object * * * pp_stack, __int64 oparg, _object * kwnames) Line 4845  C

Не уверен,это актуально, но мой код - приложение Django 2.x.Есть идеи, что происходит?(Я только что перенес этот код из Python2)

Могу ли я сказать PyDev не использовать предварительно скомпилированный код (pyd)?

ОБНОВЛЕНИЕ

Установка переменной env не помогла;Я попытался установить его для Eclipse, в определении Python и в конфигурации Debug.

Удивительно, но удаление (переименование) .pyd тоже не сработало.

Я попытался повторноустановите PyDev и , а не на этот раз создайте ускорения отладчика (при условии, что именно так создается .pyd), но ошибка остается.

warning: Debugger speedups using cython not found. Run '"C:\Anaconda3\python.exe" "C:\eclipse-jee-oxygen\configuration\org.eclipse.osgi\364\data\779679999\plugins\org.python.pydev.core_6.3.3.201805051638\pysrc\setup_cython.py" build_ext --inplace' to build.

Ответы [ 2 ]

0 голосов
/ 13 мая 2018

Мне удалось «решить» (по крайней мере, обойти) проблему, понизив пакет sip conda install sip=4.18 (у меня была версия 4.19.8)

Сначала я попытался просто удалить его с помощью conda uninstall sip ---force (conda хотела удалить также совершенно не связанный пакет), однако это привело к ошибкам Qt5.

После обхода проблемы автозаполнение в режиме отладки не работает (не уверен, связан ли он). И ошибка, и исправление для этого случая были абсурдными.

Ошибка завершения:

Error in fetching completionsTraceback (most recent call last):
  File "C:\eclipse-jee-oxygen\plugins\org.python.pydev.core_6.3.3.201805051638\pysrc\_pydevd_bundle\pydevd_comm.py", 
    line 1431, in do_it 
        completions_xml = pydevd_console.get_completions(frame, elf.act_tok)
  File "C:\eclipse-jee-oxygen\plugins\org.python.pydev.core_6.3.3.201805051638\pysrc\_pydevd_bundle\pydevd_console.py", 
    line 248, in get_completions
        return _pydev_completer.generate_completions_as_xml(frame, act_tok)
  File "C:\eclipse-jee-oxygen\plugins\org.python.pydev.core_6.3.3.201805051638\pysrc\_pydev_bundle\_pydev_completer.py", 
    line 167, in generate_completions_as_xml
        completions = pydevconsole.get_completions(act_tok, act_tok, updated_globals, frame.f_locals)
  File "C:\eclipse-jee-oxygen\plugins\org.python.pydev.core_6.3.3.201805051638\pysrc\pydevconsole.py", 
    line 462, in get_completions
        interpreterInterface.interpreter.update(globals, locals)
  File "C:\eclipse-jee-oxygen\plugins\org.python.pydev.core_6.3.3.201805051638\pysrc\_pydev_bundle\pydev_ipython_console_011.py", 
    line 350, in update
        for key in dict_keys(self.ipython.user_ns):
NameError: name 'dict_keys' is not defined

dict_keys не является методом в pydev_ipython_console_011.py и не импортируется, насколько я могу судить.

Моим «исправлением» было добавление print(type(self.ipython.user_ns)), чтобы проверить, могу ли я удалить dict_keys, и это чудесным образом решило проблему. Мое предположение состояло в том, что это вызвало некоторую перекомпиляцию pyc, но удаление строки печати привело к повторному появлению ошибки ... поэтому я предполагаю, что произошло некоторое повреждение памяти.

0 голосов
/ 09 мая 2018

Не знаю, почему он там ломается, в любом случае, простой обходной путь, пока это не будет решено, - удалить связанный .pyd в отладчике pydev (то есть: просто удалить * .pyd из папки _pydevd_frame_eval, где расположен отладчик - - фактический файл .pyd в этом случае выглядит так: pydevd_frame_evaluator.cp36-win_amd64.pyd).

Это в eclipse/plugins/org.python.pydev.core_XXX/pysrc/_pydevd_frame_eval.

Другим вариантом является установка переменной среды с именем PYDEVD_USE_FRAME_EVAL как NO.

...