Python 36 (Eclipse Oxygen, PyDev) 到达断点时崩溃

Python 36 (Eclipse Oxygen, PyDev) crashes when reaching breakpoint

Python 36(在 Windows 7 上,最新的 Anaconda 和 Python 36 在最新的 Eclipse Oxygen 下)在到达断点时崩溃。错误是 'classic' 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) 吗?

更新

设置环境变量没有帮助;我尝试在 Python 定义和调试配置中为 Eclipse 设置它。

令人惊讶的是,删除(实际上是重命名).pyd 也没有用。

我尝试重新安装 PyDev,但这次没有构建调试器加速(假设这是创建 .pyd 的方式),但错误仍然存​​在。

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

不知道为什么它在那里中断,无论如何,在解决这个问题之前,一个简单的解决方法是删除 pydev 调试器中的相关 .pyd(即:只需删除 _pydevd_frame_eval 文件夹中的 *.pyd调试器位于——在这种情况下实际的 .pyd 文件是这样的:pydevd_frame_evaluator.cp36-win_amd64.pyd).

那是在 eclipse/plugins/org.python.pydev.core_XXX/pysrc/_pydevd_frame_eval.

另一种选择是将名为 PYDEVD_USE_FRAME_EVAL 的环境变量设置为 NO

我通过降级 sip 软件包 conda install sip=4.18(我的版本是 4.19.8)

设法 "solve"(至少解决了)这个问题

我首先尝试使用 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 中的方法,据我所知也没有导入。

我的 'fix' 是添加一个 print(type(self.ipython.user_ns)) 来检查我是否可以删除 dict_keys 并且这奇迹般地解决了问题。 我的假设是这触发了对 pyc 的一些重新编译,但是删除打印行使错误再次发生......所以我猜这涉及到一些内存损坏。