进入IPython中的函数

进入IPython中的函数,python,debugging,ipython,pdb,Python,Debugging,Ipython,Pdb,在ipython中有没有一种方法可以单步进入函数的第一行。我想象着会是这样的: %step foo(1, 2) 它运行ipdb,并在foo的第一行设置断点 如果我现在想这样做,我必须转到函数的源代码并添加一个importipdb;ipdb.set_trace()line.ipdb从今年早些时候的0.7开始就支持runcall、runeval和run。您可以像使用pdb.runcall一样使用它: In [1]: def foo(a, b): ...: print a + b

在ipython中有没有一种方法可以单步进入函数的第一行。我想象着会是这样的:

%step foo(1, 2)
它运行
ipdb
,并在
foo
的第一行设置断点


如果我现在想这样做,我必须转到函数的源代码并添加一个
importipdb;ipdb.set_trace()
line.

ipdb从今年早些时候的0.7开始就支持runcall、runeval和run。您可以像使用pdb.runcall一样使用它:

In [1]: def foo(a, b):
   ...:     print a + b
   ...:

In [2]: import ipdb

In [3]: ipdb.runcall(foo, 1, 2)
> <ipython-input-1-2e565fd9c4a4>(2)foo()
      1 def foo(a, b):
----> 2     print a + b
      3

ipdb>
[1]中的
:def foo(a,b):
…:打印a+b
...:
在[2]中:导入ipdb
[3]中:ipdb.runcall(foo,1,2)
>(2)富()
1个def foo(a、b):
---->2打印a+b
3.
ipdb>

您所要求的IPython魔术现在已在较新版本中实现:


您只需键入
%debug foo(1,2)
然后
s
即可进入该函数

没有类似于
%step
的函数。您可以
%运行-d
整个脚本,但不能对单个语句或函数调用执行相同的操作。你可以手动
pdb.run(“foo(1,2)”)
pdb.runcall(foo,1,2)
。我今天也在想同样的事情。如果可以的话,我会一直用这个。是时候深入研究iPython源代码了,看看它是如何实现的。我需要的是它可能的副本。感谢您指出0.7更新,我有一个旧版本。因此,添加一个使用runcall的ipython magic可能很容易。事实证明,您不需要外部ipdb,只需从ipython.core.debugger导入Pdb执行
;ipdb=Pdb()
。这不是最优雅的方法。我希望有一个神奇的功能来满足这样一个共同的需求。我想知道这是否是
SciPy
用户的普遍需求…六年后的今天,从最初的答案开始+1对我有用。