进入IPython中的函数
在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
%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对我有用。