illumos-port-bash/tests/dbg-support.tests

149 lines
3.2 KiB
Plaintext

# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
#
# Test correct functioning bash debug support not via the bashdb
# debugger but merely by printing via print_trap()
# $Id: dbg-support.tests,v 1.13 2003/02/17 22:02:25 rockyb Exp $
shopt -s extdebug
print_debug_trap() {
echo "debug lineno: $1 ${FUNCNAME[1]}"
return
}
print_return_trap() {
echo "return lineno: $1 ${FUNCNAME[1]}"
return
}
fn1() {
echo "LINENO $LINENO"
echo "LINENO $LINENO"
echo "BASH_SOURCE[0]" ${BASH_SOURCE[0]}
echo "FUNCNAME[0]" ${FUNCNAME[0]}
echo `caller`
echo `caller 0`
echo `caller 1`
echo `caller foo`
}
fn2() {
echo "fn2 here. Calling fn1..."
fn1
}
fn3() {
echo "LINENO $LINENO"
echo "BASH_SOURCE[0]" ${BASH_SOURCE[0]}
# Print a stack trace
declare -i n
n=${#FUNCNAME[@]}
for (( i=0 ; (( i < $n )) ; i++ )) ; do
local -i j=i+1
[ $j -eq $n ] && j=i # main()'s file is the same as the first caller
echo "${FUNCNAME[$i]} called from file " \
"\`${BASH_SOURCE[$j]}' at line ${BASH_LINENO[$j]}"
done
source ./dbg-support.sub
}
fn4() {
echo "fn4 here. Calling fn3..."
fn3
}
#
# Test of support for debugging facilities in bash
#
# Test debugger set option functrace - set on. Not in vanilla Bash 2.05
#
set -o functrace
trap 'print_debug_trap $LINENO' DEBUG
trap 'print_return_trap $LINENO' RETURN
# Funcname is now an array, but you still can't see it outside a function
echo "FUNCNAME" ${FUNCNAME[0]:-main}
# We should trace into the below.
# Start easy with a simple function.
fn1
fn2
fn3
source ./dbg-support.sub
# Test debugger set option functrace - set off
set +T
# We should not trace into this.
fn1
fn2
fn3
fn4
source ./dbg-support.sub
# Another way to say: set -o functrace
set -T
# We should trace into this.
source ./dbg-support.sub
set +T
# Test that the line numbers in the presence of conditionals are correct.
for (( i=0 ; (( i <= 2 )) ; i++ )) ; do
if [ $i -eq 2 ] ; then
echo "Hit 2"
fi
j=4
done
#
# Check line numbers in command substitution
#
echo $(sourced_fn)
echo `sourced_fn`
x=$((sourced_fn))
x={ sourced_fn }
# Make sure we step into sourced_fn as a command when we request to do so.
# Vanilla bash 2.0 doesn't do.
set -o functrace
x={ sourced_fn }
# Should see line number of xyzzy below. Vanilla bash 2.05b doesn't do
case xyzzy in
a )
x=5
;;
xyzz? )
case 3 in
2 )
x=6 ;;
3 )
echo "got it" ;;
* ) echo "no good" ;;
esac
;;
* )
esac
# Should see line numbers for initial for lines.
for i in 0 1 ; do
for j in 3 4 ; do
((x=i+j))
done
done
${THIS_SH} ./dbg-support3.sub