Stepping into a function in IPython
16,910
Solution 1
ipdb has had support for runcall, runeval and run since 0.7, earlier this year. You can use it just like 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>
Solution 2
The IPython magic you was asking for is now implemented with the newer versions: https://stackoverflow.com/a/46333421/4374441
You just have to type %debug foo(1, 2)
then s
to step into the function.
Author by
Daniel
Updated on June 19, 2022Comments
-
Daniel about 2 years
Is there a way to step into the first line of a function in ipython. I imagine something that would look like:
%step foo(1, 2)
which runs
ipdb
and sets a breakpoint at the first line offoo
.If I want to do this now I have to go to the function's source code and add an
import ipdb; ipdb.set_trace()
line. -
Daniel over 11 yearsThat's pretty much what I need. Thanks for pointing out the 0.7 update, I had an older version. Having that it's probably easy to add an ipython magic which uses runcall.
-
Daniel Roseman over 11 yearsActually it turns out you don't need the external ipdb, you can just do
from IPython.core.debugger import Pdb; ipdb=Pdb()
. -
ivan_pozdeev over 8 yearsNot the most elegant method. I expected a magic function for such a common need. I wonder if it's not a common need for
SciPy
users... -
El'endia Starman over 5 yearsSix years later to the day from the original answer! +1 works for me.