2013-02-19 48 views
2

我在用ipdb調試我的Python腳本。不知怎的,我有問題,即輸入命令後,例如n, s, c, b等。我必須按Ctrl + D兩次,以便ipdb處理命令並繼續。ipdb需要Ctrl + D才能處理命令

任何想法是什麼原因導致這和我怎麼可以將其關閉

+0

@EricLeschinski是的,我明白了。雖然我猜這不能解決我的問題,是嗎? – RevMoon 2013-02-19 14:52:54

回答

2

這種效果不是孤立到IPDB:

技術上按Ctrl-d傳輸終止,並且如果這導致 在一個空的輸入緩衝器僅提高EOF。只有在輸入任何 字符之前按Ctrl-D纔會發生這種情況。

做這個實驗:

1. At the linux terminal type cat 
2. press enter once. 
3. enter letters: foo 
4. press <Ctrl-D> once, you don't get back to the terminal. 
5. press <Ctrl-D> again, you are brought back to the terminal. 

所以它看起來像這樣:

[email protected] ~ $ cat 
[email protected] ~ $ 

富印兩次,因爲你按下它的第一次刷新您的輸入。第二次被解釋爲結束程序。

如何制止這種行爲:

不要連接到當你按下Ctrl-d一個TTY。這意味着不要使用普通的linux終端。不知道這是否可能。

如何IPDB

,按enter鍵應該處理的指令通過視頻在這裏所示處理的命令:http://www.gregaker.net/2012/apr/05/debugging-python-with-pdb-or-ipdb/

+0

謝謝,你是什麼意思,我不應該連接到TTY?我以兩種方式開始調試:(1)在控制檯中輸入'ipdb myscript.py'並(2)添加'import ipdb; pdb.set_trace()'到我的腳本並運行'python myscript.py' – RevMoon 2013-02-19 15:00:21

1

這是事情:Ctrl+D不殺程序,它減少一半等待通過。當您按Ctrl+D時,您會中斷正在等待輸入的進程'read()調用。當他們讀0字節輸入

按Ctrl + d

大多數程序將中止。如果你在輸入任何東西之前,你會發送0字節,並且可能誘發關閉程序,這可能認爲沒有什麼可以完成的。這不是被迫

但是,如果你按下一些鍵,然後Ctrl+Dread()調用你中斷將返回該文本,並且底層程序決定等待另一輪。

這就是爲什麼當你再次輸入任何新文字時,你會得到你期望的行爲。

你的情況下

這是什麼可能發生的事情:

  1. 你輸入一些字符,他們得到緩衝。

  2. Ctrl+D。文本到達iPdb,但它不檢測換行符,因此它等待更多。

  3. 你再次Ctrl+D。這一次0字節到達iPdb,它假設沒有更多東西來處理有或沒有換行符的文本。

+0

和我怎麼能告訴ipdb /控制檯在我輸入後讀取? – RevMoon 2013-02-19 15:03:59

+0

這應該是默認行爲。你在Windows上嗎?您的鍵盤/終端是否存在配置錯誤?按下回車鍵可能會發送錯誤的字符? – slezica 2013-02-19 15:07:46

+0

不,我在Ubuntu 12.04上。我可以想象,由於在Mac OS X上使用Ubuntu作爲虛擬機會產生不良行爲。 – RevMoon 2013-02-19 21:43:14