diff options
author | om <om@e03df62e-2008-0410-955e-edbf42e46eb7> | 2006-05-07 10:10:53 +0000 |
---|---|---|
committer | om <om@e03df62e-2008-0410-955e-edbf42e46eb7> | 2006-05-07 10:10:53 +0000 |
commit | ffe8c3ce60e83c48aa393fa718602c070f4149e2 (patch) | |
tree | 832f91fd0cabe4b8524eb7e47d2cfafc5c552cd5 | |
parent | 246ef5fcf244f5b3e056803438b42593552a2ac9 (diff) |
Add new arguments to ./inspircd, 'screendebug' starts insp inside gdb and detaches the session, 'valdebug' starts insp inside valgrind, valgrind will start gdb in the event of a crash, 'screenvaldebug' (ugleh name :[) does the same but runs valgrind in a detached screen session
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@3936 e03df62e-2008-0410-955e-edbf42e46eb7
-rw-r--r-- | .inspircd.inc | 87 |
1 files changed, 83 insertions, 4 deletions
diff --git a/.inspircd.inc b/.inspircd.inc index 03be874c6..cb59bc3cb 100644 --- a/.inspircd.inc +++ b/.inspircd.inc @@ -27,6 +27,9 @@ getpidfile($confpath."inspircd.conf"); if ($arg eq "start") { start(); exit(); } if ($arg eq "debug") { debug(); exit(); } +if ($arg eq "screendebug") { screendebug(); exit() } +if ($arg eq "valdebug") { valdebug(); exit(); } +if ($arg eq "screenvaldebug") { screenvaldebug(); exit(); } if ($arg eq "stop") { stop(); exit(); } if ($arg eq "status") { if (getstatus() == 1) { @@ -88,12 +91,61 @@ sub start { } sub debug { - # Check to see its not 'running' already. - if (getstatus() == 1) { print "InspIRCd is already running.\n"; return 0; } - # If we are still alive here.. Try starting the IRCd.. - system("gdb --command=.gdbargs --args $binpath/$executable -nofork -debug -nolog"); + # Check to see its not 'running' already. + if (getstatus() == 1) { print "InspIRCd is already running.\n"; return 0; } + + # Check we have gdb + checkgdb(); + + # If we are still alive here.. Try starting the IRCd.. + system("gdb --command=.gdbargs --args $binpath/$executable -nofork -debug -nolog"); } +sub screendebug +{ + # Check to see its not 'running' already. + if (getstatus() == 1) { print "InspIRCd is already running.\n"; return 0; } + + #Check we have gdb + checkgdb(); + checkscreen(); + + # If we are still alive here.. Try starting the IRCd.. + print "Starting InspIRCd in `screen`, type `screen -r` when the ircd crashes to view the gdb output and get a backtrace.\n"; + print "Once you're inside the screen session press ^C + d to re-detach from the session\n"; + system("screen -m -d gdb --command=.gdbargs --args $binpath/$executable -nofork -debug -nolog"); +} + +sub valdebug +{ + # Check to see its not 'running' already. + if (getstatus() == 1) { print "InspIRCd is already running.\n"; return 0; } + + # Check we have valgrind and gdb + checkvalgrind(); + checkgdb(); + + # If we are still alive here.. Try starting the IRCd.. + # May want to do something with these args at some point: --suppressions=.inspircd.sup --gen-suppressions=yes + # Could be useful when we want to stop it complaining about things we're sure aren't issues. + system("valgrind -v --tool=memcheck --leak-check=yes --db-attach=yes --num-callers=10 $binpath/$executable -nofork -debug -nolog"); +} + +sub screenvaldebug +{ + # Check to see its not 'running' already. + if (getstatus() == 1) { print "InspIRCd is already running.\n"; return 0; } + + #Check we have gdb + checkvalgrind(); + checkgdb(); + checkscreen(); + + # If we are still alive here.. Try starting the IRCd.. + print "Starting InspIRCd in `screen`, type `screen -r` when the ircd crashes to view the valgrind and gdb output and get a backtrace.\n"; + print "Once you're inside the screen session press ^C + d to re-detach from the session\n"; + system("screen -m -d valgrind -v --tool=memcheck --leak-check=yes --db-attach=yes --num-callers=10 $binpath/$executable -nofork -debug -nolog"); +} sub stop { if (getstatus() == 0) { print "InspIRCd is not running. (Or PID File not found)\n"; return 0; } @@ -196,3 +248,30 @@ sub getprocessid { close PIDFILE; return $pid; } + +sub checkvalgrind +{ + unless(`valgrind --version`) + { + print "Couldn't start valgrind: $!\n"; + exit; + } +} + +sub checkgdb +{ + unless(`gdb --version`) + { + print "Couldn't start gdb: $!\n"; + exit; + } +} + +sub checkscreen +{ + unless(`screen --version`) + { + print "Couldn't start screen: $!\n"; + exit; + } +} |