#!/bin/sh # # given a corefile, runs gdb on it to print its core backtrace # you may modify $FREECIV_PATH to use a different civserver testportno=15555 case "$#" in 0) echo "supply core file(s) as argument(s)" 1>&2; exit 1;; esac findcivserver() { IFS=: for fp in $FREECIV_PATH do if [ ! -d $fp/default ] then continue fi for d in $fp $fp/.. $fp/../server $fp/../bin $fp/../../bin do if [ -x $d/civserver ] then civserver=$d/civserver return fi done done echo no civserver binary found for \$FREECIV_PATH $FREECIV_PATH 1>&2 unset civserver } IFS=' ' for core in "$@" do if [ -f "$core" ] then if [ X = X"$FREECIV_PATH" ] then # set it from the core itself! eval `strings $core | grep '^FREECIV_PATH='` # pretty dangerous export FREECIV_PATH fi findcivserver if [ X = X"$civserver" ] then continue fi echo "# using \$FREECIV_PATH $FREECIV_PATH" doptions=`find $freecivdir -name \*.c | while read f; do dirname $f; done | uniq | sed 's/^/ -d /g' | xargs echo` command="(echo bt; echo quit; exec yes '') | gdb $doptions $civserver $core" echo "# running: $command" eval $command break # just the first else echo "skipping '$core', which is not a file" 1>&2 fi done