#!../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 #;;; Local Variables: *** #;;; mode:shell-script *** #;;; eval: (sh-set-shell "bash") *** #;;; End: ***