Skip to content

Commit

Permalink
ovs-sandbox: Add an option to allow running ovs-vswitchd under gdb
Browse files Browse the repository at this point in the history
It is some times useful to leverage the sandbox facility to experiment
and explore the internals of ovs-vswitchd.  Since GDB requires console
access for user inputs, this patch launch an xterm for GDB, The main
terminal continue to run the sub-shell as before. Exiting the sub-shell
will also kill the ovs-vswitchd under GDB (but not GDB itself currently)

Signed-off-by: Andy Zhou <[email protected]>
Acked-by: Ben Pfaff <[email protected]>
  • Loading branch information
azhou-nicira committed Feb 19, 2015
1 parent bcbb130 commit 8da7cd8
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 4 deletions.
21 changes: 21 additions & 0 deletions tutorial/Tutorial.md
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,27 @@ The sandbox directory contains log files for the Open vSwitch dameons.
You can examine them while you're running in the sandboxed environment
or after you exit.

Using GDB
---------

GDB support is not required to go through the tutorial. It is added in case
user wants to explore the internals of OVS programs.

GDB can already be used to debug any running process, with the usual
'gdb <program> <process-id>' command.

'ovs-sandbox' also has a '-g' option for launching ovs-vswitchd under GDB.
This option can be handy for setting break points before ovs-vswitchd runs,
or for catching early segfaults.

To avoid GDB mangling with the sandbox sub shell terminal, 'ovs-sandbox'
starts a new xterm to run each GDB session. For systems that do not support
X windows, GDB support is effectively disabled.

When launching sandbox through the build tree's make file, the '-g' option
can be passed via the 'SANDBOXFLAGS' environment variable.
'make sandbox SANDBOXFLAGS=-g' will start the sandbox with ovs-vswitchd
running under GDB in its own xterm if X is available.

Motivation
----------
Expand Down
2 changes: 1 addition & 1 deletion tutorial/automake.mk
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,4 @@ EXTRA_DIST += \
tutorial/t-stage4

sandbox: all
cd $(srcdir)/tutorial && MAKE=$(MAKE) ./ovs-sandbox -b $(abs_builddir)
cd $(srcdir)/tutorial && MAKE=$(MAKE) ./ovs-sandbox -b $(abs_builddir) $(SANDBOXFLAGS)
30 changes: 27 additions & 3 deletions tutorial/ovs-sandbox
Original file line number Diff line number Diff line change
Expand Up @@ -16,16 +16,36 @@

set -e

run () {
echo "$@"
run() {
(cd "$sandbox" && "$@") || exit 1
}

run_xterm() {
run xterm -e "$@" &
}

rungdb() {
under_gdb=$1
shift
# Remove the --detach and to put the process under gdb control.
# Also remove --vconsole:off to allow error message to show up
# on the console.
# Use "DISPLAY" variable to determine out if X is supported
if $under_gdb && [ "$DISPLAY" ]; then
args=`echo $@ |sed s/--detach//g | sed s/--vconsole:off//g`
run_xterm gdb --args $args
else
run $@
fi
}

gdb_vswitchd=false;
builddir=
srcdir=
schema=
installed=false
built=false

for option; do
# This option-parsing mechanism borrowed from a Autoconf-generated
# configure script under the following license:
Expand Down Expand Up @@ -63,6 +83,7 @@ These options force ovs-sandbox to use a particular OVS build:
-s, --srcdir=DIR specify Open vSwitch source directory
These options force ovs-sandbox to use an installed Open vSwitch:
-i, --installed use installed Open vSwitch
-g, --gdb-vswitchd run ovs-vswitchd under gdb
-S, --schema=FILE use FILE as vswitch.ovsschema
Other options:
Expand Down Expand Up @@ -98,6 +119,9 @@ EOF
prev=schema
installed=:
;;
-g|--gdb-v*)
gdb_vswitchd=true
;;
-*)
echo "unrecognized option $option (use --help for help)" >&2
exit 1
Expand Down Expand Up @@ -204,7 +228,7 @@ run ovsdb-server --detach --no-chdir --pidfile -vconsole:off --log-file \
--remote=punix:"$sandbox"/db.sock

# Start ovs-vswitchd.
run ovs-vswitchd --detach --no-chdir --pidfile -vconsole:off --log-file \
rungdb $gdb_vswitchd ovs-vswitchd --detach --no-chdir --pidfile -vconsole:off --log-file \
--enable-dummy=override -vvconn -vnetdev_dummy

cat <<EOF
Expand Down

0 comments on commit 8da7cd8

Please sign in to comment.