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)
> (2)foo()
1 def foo(a, b):
----> 2 print a + b
3
ipdb>