Darren Freeman wrote:
> Rob, all,
> 
> I just overhauled lyxdbg again, now v0.3

Darren, have a look at v0.3b :)
Prettyfied it a bit; functionality is same.

Rob.
---
#!/bin/sh
#
# This file is copyright 2002 Darren Freeman and Rob Lahaye.
# It is covered by the GNU General Public License which was supplied with LyX.
# 0.1  - Initial version by Darren Freeman
# 0.2  - Greatly improved by Rob Lahaye
# 0.2b - Revisited by Darren Freeman
# 0.3  - More commands to gdbcmd, made LyX async for faster loading, added trace 
gzipping. By Darren Freeman
# 0.3b - 2002/12/01 Prettifying by Rob.

version="LyX automatic backtrace generator v0.3b"
echo "$version"

# Define file names for output.
gdbcmd="lyx-gdb-cmd"
trace="lyx-trace"
lyxout="lyx-stdout"
lyxerr="lyx-stderr"

# lyx executable is either the first argument or assume it to be in ./ or ./src/ 
if ( test -x "$1" -a ! -d "$1" )
then
        lyx=$1
        shift
else
        for i in ./lyx ./src/lyx
        do
                if ( test -x "$i" -a ! -d "$i" )
                then
                        lyx=$i
                        break
                fi
        done
fi

if ( test -z "$lyx" )
then
        echo "Error: cannot find LyX executable!"
        echo "Either supply the full path of the LyX executable as the"
        echo "first argument or 'cd' into the LyX build directory."
        exit
fi

# Check next argument for coredump file.
[ -n "`file -i $1 2>/dev/null | grep coredump`" ] && { coredump=$1; shift; }

# Create stdin for GDB.
echo -n > $gdbcmd

# GDB needs to wait for LyX as we will spawn it below.
[ -z "$coredump" ] && echo "finish" >> $gdbcmd

echo "bt"          >> $gdbcmd
echo "info locals" >> $gdbcmd
echo "up"          >> $gdbcmd
echo "info locals" >> $gdbcmd
echo "up"          >> $gdbcmd
echo "info locals" >> $gdbcmd
echo "up"          >> $gdbcmd
echo "info locals" >> $gdbcmd

# Allow LyX to continue with an emergency save in case of crash.
[ -z "$coredump" ] && echo "continue" >> $gdbcmd

# Start the trace file with the version string.
echo "$version" > $trace

# Append the GDB commands to the trace.
echo "----------*-commands-*----------" >> $trace
cat "$gdbcmd" >> $trace

echo "----------*---gdb----*----------" >> $trace

if ( test -z "$coredump" )
then
        # Spawn LyX in the background and save its PID.
        echo "Starting $lyx ..."
        $lyx $@ > $lyxout 2> $lyxerr &
        lyxpid=$!
        echo "Attaching the debugger..."
else
        echo "Executing the debugger on core file $coredump ..."
fi

# Start GDB; either attach to running LyX pid or read the core dump. 
gdb < $gdbcmd >> $trace 2>&1 $lyx $lyxpid$coredump
echo >> $trace

# If we started LyX ourselves we can append the output of LyX.
if ( test -z "$coredump" )
then
        # Append the stdout and stderr from LyX.
        echo "----------*--stdout--*----------" >> $trace
        cat $lyxout >> $trace
        echo "----------*--stderr--*----------" >> $trace
        cat $lyxerr >> $trace
fi
        
# Compress without removing original.
gzip -c $trace > ${trace}.gz

echo
echo "The file $trace contains everything GDB and LyX has said."
echo "${trace}.gz is the compressed version for emailing."

# Clean up files.
rm -f $gdbcmd $lyxout $lyxerr

# Extra messages when interesting things are in lyx-trace..
# add more interesting things below!
if ( grep SIGSEGV $trace )
then
  echo
  echo "Whoa! Looks like something nasty happened."
  echo "*Please* email the above file to the LyX team at:"
  echo "[EMAIL PROTECTED]"
  echo "Don't forget to include what you were doing when it bombed!"
fi

Reply via email to