调试器在“收集数据...”时超时

新手上路,请多包涵

我正在 Windows 10 上使用 PyCharm ( PyCharm Community Edition 2016.2.2 ; Build #PC-162.1812.1, built on August 16, 2016 ; JRE: 1.8.0_76-release-b216 x86 ; JVM: OpenJDK Server VM by JetBrains s.r.o ) 调试 Python ( 3.5 ) 程序。

问题:当在某些断点处停止时,调试器窗口停留在“收集数据”处,最终超时。 ( _无法显示帧变量_)

要显示的数据既不特殊,也不是特别大。 PyCharm 可以以某种方式使用它,因为所述数据的某些值的条件断点工作正常(程序中断)——看起来收集它仅用于显示(而不是操作目的)的过程失败了。

当我在我有断点的地方进入一个函数时,它的数据会正确显示。当我进入堆栈(到调用函数,我退出的函数以及我最初想要断点的地方)时 - 我再次陷入“收集数据”超时。

至少自 2005 年以来,就同一点提出了许多问题。有些已解决,有些则没有。这些修复通常是更新到最新版本(我有)。

为了修复或解决这一系列问题,我是否可以遵循一个总体方向?


编辑:一年后问题仍然存在,并且在提出错误后开发人员/支持人员仍然没有任何反应。


编辑 2018 年 4 月:看起来问题已在 2018.1 版本中解决,print 行上设置断点时挂起的以下代码现在有效(我可以看到变量):

 import threading

def worker():
    a = 3
    print('hello')

threading.Thread(target=worker).start()

原文由 WoJ 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 919
2 个回答

我认为这是由某些类的默认方法 str() 过于冗长造成的。 Pycharm 在遇到断点时调用此方法来显示局部变量,并在加载字符串时卡住。我用来克服这个问题的一个技巧是手动编辑导致错误的类,并将 str() 方法替换为不那么冗长的内容。

例如,它发生在 pytorch _TensorBase 类(以及扩展它的所有张量类)中,并且可以通过编辑 pytorch 源 torch/tensor.py 来解决,将 str() 方法更改为:

 def __str__(self):
        # All strings are unicode in Python 3, while we have to encode unicode
        # strings in Python2. If we can't, let python decide the best
        # characters to replace unicode characters with.
        return str() + ' Use .numpy() to print'
        #if sys.version_info > (3,):
        #    return _tensor_str._str(self)
        #else:
        #    if hasattr(sys.stdout, 'encoding'):
        #        return _tensor_str._str(self).encode(
        #            sys.stdout.encoding or 'UTF-8', 'replace')
        #    else:
        #        return _tensor_str._str(self).encode('UTF-8', 'replace')

远非最佳,但随手可得。

更新:该错误似乎在最新的 PyCharm 版本(2018.1)中得到了解决,至少对于影响我的案例而言是这样。

原文由 Manel B 发布,翻译遵循 CC BY-SA 3.0 许可协议

当我使用 pycharm2018.2 调试我的 web 应用程序时,我有同样的问题。

该项目是一个结合了 SocketIO 的复杂的 flask web 服务器。

当我在代码中创建一个调试断点然后按下调试按钮时,它停在断点处,但变量没有加载。它只是收集数据数据。最后我对调试器设置做了一些调整,这让它起作用了。请参阅下图以更改设置:

图片

原文由 linkliu mayuyu 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题