如何提高Eclipse Python调试器的可靠性?
我发现,在某些情况下,Eclipse的Python调试器可能不太可靠。例如,当我在调试一个占用内存较多的Python程序时,发现到了一定的阶段,调试器就不再响应了,整个过程卡住,CPU使用率达到100%。
我听说(虽然没有确认)一些开发者提到,当这种情况发生时,可能并不是完全卡住,而是变得非常慢,比如一个通常只需微秒的步骤,可能会花上五分钟。
我在使用普通的Eclipse调试器(比如选择调试作为->Python运行)和pydev网络调试器时都观察到了这个问题。停止工作的时机似乎很随意,但可以重复出现。我调试的都是纯数字函数,所以没有明显的网络活动会干扰网络调试器。不过,失败发生的时机在特定的工作站和任务上似乎是相当一致的。
无论是使用调试作为->Python运行,还是使用pydev的网络调试器('import pydevd;pydevd.settrace()'),我几乎都能得到相同的效果——一个失败,另一个也很可能会失败。
如果我正常运行脚本(不使用调试器),它就能顺利执行而不会卡住。此外,如果我用老式的内联断点('import pdb;pdb.set_trace()')替换掉Eclipse调试器,一切都能正常工作。Pdb几乎从不出错,但有时候我根本无法使用它,比如当我在调试一个从Excel调用的Python函数时——因为没有控制台可用。
我注意到,这种失败似乎从未发生在简单的程序上,因此我初步得出结论,问题可能与内存有关。
那么,有人知道可能导致这种不可靠性的原因吗?有没有什么调整可以让调试器或环境更可靠地工作?
顺便说一下,我在Windows XP 32位上运行Python 2.4.4,使用最新的Eclipse和Pydev。Psyco(即时编译器)不可用。
2 个回答
我不太确定这是否相关,但我遇到过一个情况,就是调试信息太多会导致我的电脑变得非常慢。你可以试着去窗口 -> 首选项 -> 运行/调试 -> 控制台... 勾选限制控制台输出,然后减少控制台缓冲区大小(我的是设置为40000)。
Python 2.4有一些已知的问题(所以,如果可以的话,建议你使用更新的版本)。不过,如果你实在无法获取更新的版本,至少可以使用threadframe这个扩展(http://pypi.python.org/pypi/threadframe)。如果这些都不行的话,调试工具的表现可能就不会很好,因为它需要一些在这个版本中没有的功能。