2010-04-24 88 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時相同 - 它只是一個在命中斷點後在可用控制檯中鍵入代碼的問題)。

乾杯,

法比奧