假设我有一个IPython会话,我从该会话调用一些脚本:
> run my_script.py
有没有办法在my_script.py
中引入一个断点,以便从IPython检查我的工作区?
我记得在以前的IPython版本中阅读过这样的内容:
from IPython.Debugger import Tracer;
def my_function():
x = 5
Tracer()
print 5;
但是子模块Debugger
似乎不再可用。
假设我已经打开了一个IPython会话:如何在选择位置停止程序并使用IPython检查工作区?
一般来说,我更喜欢不需要预先指定行号的解决方案,因为我希望对上面的Tracer()
进行不止一次这样的调用,而不必跟踪它们所在的行号。
7条答案
按热度按时间mxg2im7a1#
Tracer()
仍然存在于ipython中的另一个模块中。请注意
Tracer
前后的附加调用括号edit:对于IPython 6及更高版本的
Tracer
is deprecated,因此应改用set_trace()
:pcrecxhr2#
您可以执行它,并在指定的行设定中断点,方法如下:
其中-b12在第12行设置断点。当您进入此行时,您将立即进入pdb,并且您需要输入
c
以执行到该断点。lnxxn5zx3#
这是使用
set_trace()
方法的版本,而不是已弃用的Tracer()
方法。oxcyiej74#
在IPython shell中,您可以执行以下操作
例如,在函数内部执行普通的
pdb.set_trace()
。bprjcwpo5#
我一直有同样的问题和最好的变通办法,我发现这是相当hackey是添加一行,将打破我的代码,像这样:
然后当我运行代码时,它会被破坏,我可以使用%debug来检查。你也可以打开%pdb来检查代码破坏的地方,但是如果你不想每次都检查代码破坏的地方,这可能会很麻烦。我希望有一个更优雅的解决方案。
eeq64g8w6#
在Python 3(v3.7+)中,有一个新的
breakpoint()
函数,你可以修改它的行为,让它为你调用ipython的调试器。基本上,您可以设置一个指向调试器函数的环境变量(如果不设置该变量,
breakpoint()
默认为调用pdb)。要将
breakpoint()
设置为调用ipython的调试器,请按如下方式设置环境变量(在shell中):(Note,显然,如果您想永久设置环境变量,则需要修改您的shell配置文件或系统首选项。)
您可以写入:
而且它会为你进入ipython的调试器,我认为这比导入
from IPython.core.debugger import set_trace
和调用set_trace()
要方便得多。ruarlubt7#
I see a lot of options here, but maybe not the following simple option. Fire up ipython in the directory where
my_script.py
is. Turn the debugger on if you want the code to go into debug mode when it fails. Type%pdb
.Next type
Now you can set a breakpoint where ever you want it. Type
b 100
to have a breakpoint at line 100, orb whatever.py:102
to have a breakpoint at line 102 inwhatever.py
. For instance:Then continue to run, or continue.
Once the code fails, or reaches the breakpoint you can start using the full power of the python debugger
pdb
.Note that
pdb
also allows the setting of a breakpoint at a function.So you do not necessarily need to use line numbers.