Stepping into a function in IPython

2020-05-15 13:32发布

问题:

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 of foo.

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.

回答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>


回答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.