142 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			142 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
#!../bash
 | 
						|
#
 | 
						|
# 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
 | 
						|
}    
 | 
						|
 | 
						|
 | 
						|
#!../bash
 | 
						|
#
 | 
						|
# 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 comand 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
 | 
						|
 | 
						|
#;;; Local Variables: ***
 | 
						|
#;;; mode:shell-script ***
 | 
						|
#;;; eval: (sh-set-shell "bash") ***
 | 
						|
#;;; End: ***
 |