How to define a new function in pdb

I don't think it supports multi-line input. You can workaround by spawning up an interactive session from within pdb. Once you are done in the interactive session, exit it with Ctrl+D.

>>> import pdb
>>> pdb.set_trace()
(Pdb) !import code; code.interact(local=vars())
(InteractiveConsole)
In : def foo():
...:     print('hello in pdb')
...: 
In : # use ctrl+d here to return to pdb shell...
(Pdb) foo()
hello in pdb

You can define your function in a one line statement using ; instead of indentation, like this:

(Pdb) def foo(): print 'Hello world'; print 'I see you'
(Pdb) foo()
Hello world
I see you