PyDev 3.9.2 - 无法将调试器附加到基于gevent的进程

时间:2015-02-06 11:48:17

标签: python eclipse debugging pydev gevent

我在使用PyDev 3.9.2下的PyDev调试器附加基于gevent的进程时遇到问题。

它在PyDev 3.9.1和LiClipse 3.9.1中运行良好,而不是3.9.2这是最新的PyDev(2015年2月6日)。

当一段代码直接从PyDev的调试器运行而不是从外部运行时,它也能正常工作。

请注意,它并不取决于是否设置了断点(启用与否) - 附加到流程的事实足以引发异常。

这是一个重现行为的示例模块以及两个例外 - 一个来自PyDev,另一个来自gevent代码的观点。

任何人都可以对此有所了解吗?非常感谢。

from gevent.monkey import patch_all
patch_all()

import threading
import gevent

def myfunc():
    t = threading.current_thread()
    print(t.name)

while True:
    gevent.spawn(myfunc)
    gevent.sleep(1)

Debug Server at port: 5678
Traceback (most recent call last):
  File "/opt/slow/01/data/install/pydev/eclipse/plugins/org.python.pydev_3.9.2.201502050007/pysrc/pydevd_attach_to_process/attach_script.py", line 16, in attach
    patch_multiprocessing=False,
  File "/opt/slow/01/data/install/pydev/eclipse/plugins/org.python.pydev_3.9.2.201502050007/pysrc/pydevd.py", line 1828, in settrace
    patch_multiprocessing,
  File "/opt/slow/01/data/install/pydev/eclipse/plugins/org.python.pydev_3.9.2.201502050007/pysrc/pydevd.py", line 1920, in _locked_settrace
    CheckOutputThread(debugger).start()
  File "/opt/slow/01/data/install/pydev/eclipse/plugins/org.python.pydev_3.9.2.201502050007/pysrc/pydevd.py", line 261, in start
    thread.start()
  File "/usr/lib/python2.7/threading.py", line 750, in start
    self.__started.wait()
  File "/usr/lib/python2.7/threading.py", line 620, in wait
    self.__cond.wait(timeout)
  File "/usr/lib/python2.7/threading.py", line 339, in wait
    waiter.acquire()
  File "_semaphore.pyx",...

Traceback (most recent call last):
  File "/opt/slow/01/data/install/pydev/eclipse/plugins/org.python.pydev_3.9.2.201502050007/pysrc/pydevd_attach_to_process/attach_script.py", line 16, in attach
    patch_multiprocessing=False,
  File "/opt/slow/01/data/install/pydev/eclipse/plugins/org.python.pydev_3.9.2.201502050007/pysrc/pydevd.py", line 1828, in settrace
    patch_multiprocessing,
  File "/opt/slow/01/data/install/pydev/eclipse/plugins/org.python.pydev_3.9.2.201502050007/pysrc/pydevd.py", line 1920, in _locked_settrace
    CheckOutputThread(debugger).start()
  File "/opt/slow/01/data/install/pydev/eclipse/plugins/org.python.pydev_3.9.2.201502050007/pysrc/pydevd.py", line 261, in start
    thread.start()
  File "/usr/lib/python2.7/threading.py", line 750, in start
    self.__started.wait()
  File "/usr/lib/python2.7/threading.py", line 620, in wait
    self.__cond.wait(timeout)
  File "/usr/lib/python2.7/threading.py", line 339, in wait
    waiter.acquire()
  File "_semaphore.pyx", line 112, in gevent._semaphore.Semaphore.acquire (gevent/gevent._semaphore.c:3004)
  File "/home/dsuch/projects/pydev-plugin/pydev-plugin/local/lib/python2.7/site-packages/gevent/hub.py", line 330, in switch
    switch_out()
  File "/home/dsuch/projects/pydev-plugin/pydev-plugin/local/lib/python2.7/site-packages/gevent/hub.py", line 334, in switch_out
    raise AssertionError('Impossible to call blocking function in the event loop callback')
AssertionError: Impossible to call blocking function in the event loop callback

0 个答案:

没有答案