2015-10-12 19 views
0

這是關於Pycharm 4.5.1的。Pycharm:在交互式調試控制檯中覆蓋函數變量

每當我在函數處停止斷點時,我無法在交互式python控制檯中覆蓋或創建函數中定義的任何變量(無論這些函數變量是在斷點之前還是之後定義)。

相比之下,當我的調試點不在函數內時,我可以覆蓋當前腳本中定義的任何變量。這是一個錯誤或預期的行爲?無論如何,這讓我發瘋,因爲它讓任何交互式的斷點引導發展幾乎不可能。

我的問題:有什麼辦法可以解決Pycharm中這個惱人的行爲嗎?

極小例

>>>指我輸入的交互式調試控制檯,等我到了指定的斷點。

這工作:

a = 3 # <- put breakpoint here 

>>>一個= 4

>>>一個

缺貨[7]:4

這工作:

def test(): 
    a = 3 # <- put breakpoint here 
test() 

>>> B = 4

>>> b

缺貨[7]:4

這不起作用:

def test():  
    a = 3 # <- put breakpoint here 
test() 

>>>一個= 4

>>> a

回溯(最近通話最後一個):

文件 「/redacted/local/lib/python2.7/site-packages/IPython/core/interactiveshell.py」,線3035,在run_code EXEC(code_obj, self.user_global_ns,self。user_ns)

文件 「< IPython的輸入-5-5cd59f58ac08>」,第1行,在<模塊>

一個

NameError:名稱 'A' 沒有定義

這不起作用:

def test(): 
    a = 3 
    print('just for the sake of placing a breakpoint') # <- put breakpoint here 
test() 

>>>一個= 4

>>>一個

出[7]:3

回答

0

我要做的就是從調試器執行Alt鍵 + F8Evaluate Expression

  1. 創建你的函數,然後插入斷點宣佈變量 enter image description here
  2. 調出評估表達式對話框並重新分配a。注意區別 enter image description here
  3. 關閉和恢復方案,並通知輸出在控制檯 enter image description here
+0

感謝,將工作作爲一個變通!這樣做還是有點麻煩。如果人們可以在所謂的「交互式」控制檯中重新分配變量,那將會容易得多。 – monade

+0

我個人不是他們整體調試設置的粉絲。 – Leb

+0

是的,我也是。您是否知道任何具有可比較功能(\ *)的IDE,但更好,可能是類似Matlab的調試功能? (\ *)好吧,我知道,這非常含糊 - 但是與Pycharm類似的代碼內省將是一個開始。 – monade