2016-07-25 108 views
4

升級從PyCharm 2016年1月4日至2016.2後後,運行調試器和設置任何斷點時,PyCharm停止在我沒有斷點設置不同的地方,並記錄此標準錯誤:BlockingSwitchOutError調試器升級到PyCharm 2016.2

Traceback (most recent call last): 
    File "/usr/local/pycharm/debug-eggs/pycharm-debug.egg/_pydevd_bundle/pydevd_frame.py", line 539, in trace_dispatch 
    self.do_wait_suspend(thread, frame, event, arg) 
    File "/usr/local/pycharm/debug-eggs/pycharm-debug.egg/_pydevd_bundle/pydevd_frame.py", line 71, in do_wait_suspend 
    self._args[0].do_wait_suspend(*args, **kwargs) 
    File "/usr/local/pycharm/debug-eggs/pycharm-debug.egg/pydevd.py", line 714, in do_wait_suspend 
    time.sleep(0.01) 
    File "/home/jaza/mypyapp/mypyfile.py", line 999, in mypyfunc 
    gevent.sleep(seconds) 
    File "/usr/local/lib/python2.7/dist-packages/gevent/hub.py", line 194, in sleep 
    hub.wait(loop.timer(seconds, ref=ref)) 
    File "/usr/local/lib/python2.7/dist-packages/gevent/hub.py", line 630, in wait 
    result = waiter.get() 
    File "/usr/local/lib/python2.7/dist-packages/gevent/hub.py", line 878, in get 
    return self.hub.switch() 
    File "/usr/local/lib/python2.7/dist-packages/gevent/hub.py", line 608, in switch 
    switch_out() 
    File "/usr/local/lib/python2.7/dist-packages/gevent/hub.py", line 612, in switch_out 
    raise BlockingSwitchOutError('Impossible to call blocking function in the event loop callback') 
BlockingSwitchOutError: Impossible to call blocking function in the event loop callback 

操作系統:Linux Mint 17.3(即與Ubuntu 14.04幾乎相同)。使用最新的gevent(1.1.2)。

如果我打開我的舊PyCharm(即2016.1.4),並做同樣的事情 - 即啓動調試器,設置斷點,運行我的應用程序 - 我沒有得到這些錯誤,PyCharm不會停止代碼中的任何地方除了我的斷點。

我也嘗試了只是「降級」調試器,通過重命名debug-eggs目錄並將其替換爲舊的debug-eggs路徑,然後在最新版本上運行PyCharm的其餘部分。這並沒有解決問題,即它仍然導致BlockingSwitchOutError被無數次提升。

似乎這可能是PyCharm 2016.2中的一個錯誤。我已經向JetBrains提交了一個錯誤報告,請參閱https://youtrack.jetbrains.com/issue/PY-20183。但是也可以在SO上張貼,以防有人在我的應用程序中看到代碼存在問題(使用gevent.sleep(seconds)?),這意味着代碼早就適用,但遲早會破壞。

+0

我有完全相同的錯誤。 PyCharm 2016.1.4按預期工作。 – scooterman

回答

3

發表Elizaveta Shashkova在PyCharm問題跟蹤在https://youtrack.jetbrains.com/issue/PY-20183該解決方案爲我工作:

的新功能已經出現在PyCharm:斷點線程掛起政策。你應該去運行|查看斷點,選擇斷點並更改其線程掛起策略:「線程」或「全部」。您也可以爲所有斷點設置默認策略。

將暫停策略從「全部」更改爲「線程」後,調試器不再突破我的斷點,也不會拋出BlockingSwitchOutError

而且,重:

而且你有沒有設置 「GEVENT兼容」 開啓? https://www.jetbrains.com/help/pycharm/2016.1/python-debugger.html

不,我沒有這個打開,我固定我的問題,而不將其打開。但是如果將來我有類似的問題,會嘗試開啓它。