ipdb需要Ctrl + D才能处理命令

时间:2013-02-19 14:42:13

标签: python debugging pdb

我正在使用ipdb调试我的Python脚本。不知怎的,我有问题,输入命令后,例如n, s, c, b等。我必须按两次 Ctrl + D ,以便ipdb处理命令并继续。

知道导致这种情况的原因和如何关闭它

2 个答案:

答案 0 :(得分: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.

所以它看起来像这样:

user@defiant ~ $ cat
foofoouser@defiant ~ $

foo会打印两次,因为第一次按下它会刷新输入。第二次被解释为结束该计划。

如何阻止此行为:

按Ctrl-D时,请勿连接到TTY。这意味着不要使用普通的linux终端。不确定这是否可能。

如何在ipdb中处理命令

按Enter键应处理命令,如视频所示:http://www.gregaker.net/2012/apr/05/debugging-python-with-pdb-or-ipdb/

答案 1 :(得分:1)

这就是事情:Ctrl+D不会杀死程序,它会在中途停止等待。按Ctrl+D时,会中断正在等待输入的“read()来电”。

控制+ d

大多数程序在读取0个字节作为输入时将中止。如果您在输入任何内容之前Ctrl+D,您将在输入管道中发送0字节,并且可能诱导关闭程序,这可能会认为没有什么可做的。这不是强制

但是,如果按某些键,然后按Ctrl+D,则中断的read()调用将返回该文本,基础程序决定等待另一轮。

这就是为什么当你Ctrl+D再次没有输入任何新文本时,你会得到你期望的行为。

您的案例

这可能是发生的事情:

  1. 您键入了一些字符,它们会被缓冲。

  2. Ctrl+D。文本到达iPdb,但它没有检测到换行符,因此等待更多。

  3. 您再次Ctrl+D。这一时间0个字节到达iPdb,假设没有更多内容可以处理带有或不带换行符的文本。