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
的一些重新编译,但是删除打印行使错误再次发生......所以我猜这涉及到一些内存损坏。
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)
我首先尝试使用 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
的一些重新编译,但是删除打印行使错误再次发生......所以我猜这涉及到一些内存损坏。