在Eclipse+PyDev中调试Python

7 投票
2 回答
12410 浏览
提问于 2025-04-15 21:58

我在工作中尝试使用Eclipse和PyDev的组合。(Eclipse版本3.5.0和PyDev版本1.5.6)我找不到方法把我所有的变量都显示在PyDev控制台里(通过PyDev控制台 -> 当前活动编辑器的控制台选项)。我用一段简单的代码来说明这个问题。当我逐步调试代码时,我无法从控制台访问我的“x”变量。虽然在变量标签中可以看到它,但这并不是我想要的。

任何帮助都非常感谢。

可以查看我的截图以更好地理解:

alt text

编辑:

假设我在代码中添加一个简单的函数,比如:

def myfunc(x):
    return x**x

当我在代码中添加这个函数进行调试时,我可以很容易地从控制台访问myfunc。(输入myfunc,它会在这个自动执行后可用:

>>> from part2.test import myfunc
>>> myfunc

然后当我执行myfunc(5)时,它的表现就像在Python解释器中一样。能够以类似的方式访问变量来调试我的代码会非常有用。我有很大的数组,在调试过程中会进行各种测试和操作。比如:获取我的x并执行x.sum(),然后执行x[::10],或者与其他数组进行转置操作观察结果,进行实验等等……

希望能有更好的解决方案。

2 个回答

2

对于这种探索性的调试,我喜欢使用pdb,这是一个自带功能的调试工具。我还没有在PyDev中使用过它,所以不太清楚它是怎么结合在一起的。不过我猜它会按照你的预期工作。下面是一个使用它的例子:

import pdb

def myfunc(x):
    pdb.set_trace()
    return x**x

这个例子会在执行返回语句之前暂停,这样你就可以用完整的Python语句来弄清楚发生了什么。我把它当作一种互动的打印语句来用:设置我想要深入查看的地方,检查变量的值,弄清楚结果,然后一步一步地观察事情是怎么发生的。也许这是一种懒惰的调试方式,但有时候在做出不那么懒惰的决定之前,你需要更多的信息 :-)

我通常参考的页面是 Python Conquers The Universe,上面还链接了一些其他的信息来源。

8

更新:

在最新的PyDev版本中,你可以右键点击堆栈中的某个框架,然后选择PyDev > 调试控制台,这样就能打开一个互动控制台,里面有更多与调试会话相关的功能。


不过,现在的互动控制台其实并不能和调试会话连接在一起(虽然这是计划中的功能,但还没有实现)。这意味着你不能像理想中那样使用这个控制台来玩代码(比如代码补全等功能,详细信息可以查看http://pydev.org/manual_adv_interactive_console.html)。

尽管如此,你还是可以使用一个“简单”的控制台,来互动检查和操作在断点范围内的变量:详细信息可以查看http://pydev.org/manual_adv_debug_console.html(这和你用pdb时的体验是一样的——只需在断点被触发后,在可用的控制台中输入代码即可)。

祝好,

Fabio

撰写回答