我正在 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 许可协议
我认为这是由某些类的默认方法 str() 过于冗长造成的。 Pycharm 在遇到断点时调用此方法来显示局部变量,并在加载字符串时卡住。我用来克服这个问题的一个技巧是手动编辑导致错误的类,并将 str() 方法替换为不那么冗长的内容。
例如,它发生在 pytorch _TensorBase 类(以及扩展它的所有张量类)中,并且可以通过编辑 pytorch 源 torch/tensor.py 来解决,将 str() 方法更改为:
远非最佳,但随手可得。
更新:该错误似乎在最新的 PyCharm 版本(2018.1)中得到了解决,至少对于影响我的案例而言是这样。