2010-04-24 89 views
7

我尝试使用Eclipse + PyDev对进行一些工作。 (Eclipse v3.5.0 + PyDev v1.5.6)我找不到一种方法将所有变量公开到PyDev控制台(通过PyDev控制台 - >控制台查看当前活动编辑器选项)我使用一个简单的代码来描述问题。当我逐步浏览代码时,我无法从控制台访问我的“x”变量。它在Variables选项卡上查看,但这不是我想要的。Python中的Python调试+ PyDev

任何帮助表示感谢。

看我为更好地说明截图:

alt text http://img541.imageshack.us/img541/4514/eclipsedebug.png

编辑:

假设添加一个简单的FUNC,如:

def myfunc(x): 
    return x**x 

当我与中添加的功能调试我可以轻松地从控制台访问myfunc的代码。 (类型MYFUNC这个自动执行后,将可:

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

然后当我做MYFUNC(5)它的作用就像在Python解释器这将是非常有用访问变量在类似的方式进行调试我的代码我有大数组,我在调试过程中做了各种测试和操作,例如: 获取我的x并执行x.sum(),稍后执行x [:: 10],或转置与其他数组一起操作观察结果,实验等等

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

+0

我一直在使用PyDev的几个月,不知道你能做到这一点。 (我想)从来不需要它。我在想什么? – 2010-04-24 15:18:05

+0

看到这些答案: - http://stackoverflow.com/questions/2045551/interactive-pydev-console-at-breakpoint - http://stackoverflow.com/questions/271625/interactive-console-using-pydev-in-日食 – 2010-04-24 15:17:12

+0

好的,有些看起来很有用。仍然调试控制台没有提供使用Python解释器的实际感觉,您可以在其中轻松方便地制表符和完成变量/内容的交互。 – 2010-04-24 19:06:44

回答

2

对于这种探索性的调试,我喜欢使用包含电池的调试器pdb。我没有在PyDev中使用它,所以我不知道它会如何组合在一起。我的猜测是它会做你期望的。它的用法的例子:

import pdb 

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

这将打破正确执行return语句之前,它允许你使用完全符合Python语句弄清楚发生了什么事情。我将它用作交互式印刷语句:设置我想要潜入的地方,检查值和计算结果,并逐步观察它发生的情况。也许这是一种懒惰的调试方式,但有时你需要更多的信息,然后才能作出更懒惰的决定:-)

我通常引用的页面是Python Conquers The Universe,它也链接了其他一些信息源。

+1

感谢您的建议。它只是有点挫败了使用Eclipse的目的:)在Eclipse中跳转到函数/方法的定义是一个很好的特性,它越来越多地促使我留在那里,而不是使用基于IPython + VIM的开发周期。我相信某人(Fabio也许:))会在Eclipse中进行调试时提出一种将我的变量注入本地/全局名称空间的方法。 – 2010-04-29 01:15:28

+0

请注意,您可以在断点上下文中的PyDev中执行相同的操作(请参阅http://pydev.org/manual_adv_debug_console.html)。 – 2010-04-29 18:03:39

+0

我不会说它打败了目的......但我明白你的观点。我检查并且pdb在PyDev中工作正常,并且当PyDev看到行号注释时它确实链接到源代码。对不起,PyDev并没有赶上一般的Eclipse可用性,尽管我怀疑它今后将会更进一步。 – 2010-04-30 03:28:28

8

更新:在堆栈

在最新的PyDev的版本,它可以右键单击框,然后选择的PyDev>调试控制台有一个调试会话期间关联到上下文更多的功能的交互式控制台。


不幸的是,实际的交互式控制台,这将是与打码的首选方式(与代码完成,等等 - http://pydev.org/manual_adv_interactive_console.html)必须马上调试会话没有连接(这个计划,但仍未实现)。

不过,使用'更简单'的控制台,您仍然可以交互式地检查并使用断点范围内可用的变量:http://pydev.org/manual_adv_debug_console.html(这与您使用pdb时相同 - 它只是一个在命中断点后在可用控制台中键入代码的问题)。

干杯,

法比奥