To run vpp with the debug shell:

sudo vpp unix interactive

which will result in a prompt that looks like:

DBGvpd#

To give it a spin, we can create a tap interface and try a simple ping
(with trace).

To create the tap:

DBGvpd# tap connect foobar
Created tap-0 for Linux tap 'foobar'
DBGvpd# show int

To assign it an ip address (and 'up' the interface):

DBGvpd# set int ip address tap-0 192.168.1.1/24
DBGvpd# set int state tap-0 up

To turn on packet tracing for the tap interface:
DBGvpd# trace add tapcli-rx 10

Now, to set up and try the other end from the unix prompt:
vagrant@vagrant-ubuntu-trusty-64:~$ sudo ip addr add 192.168.1.2/24 dev foobar
vagrant@vagrant-ubuntu-trusty-64:~$ ping -c 3 192.168.1.1

To look at the trace, back in the vpp CLI:
DBGvpd#  show trace

And to stop tracing:

DBGvpd# clear trace

Other fun things to look at:

The vlib packet processing graph:
DBGvpd# show vlib graph

which will produce output like:

           Name                      Next                    Previous
ip4-icmp-input                  error-punt [0]               ip4-local
                                ip4-icmp-echo-request [1]
                                vpe-icmp4-oam [2]

To read this, the first column (Name) is the name of the node.
The second column (Next) is the name of the children of that node.
The third column (Previous) is the name of the parents of this node.

END
