| 1 | #!../bash
|
|---|
| 2 | #
|
|---|
| 3 | # Test correct functioning bash debug support not via the bashdb
|
|---|
| 4 | # debugger but merely by printing via print_trap()
|
|---|
| 5 | # $Id: dbg-support.tests,v 1.13 2003/02/17 22:02:25 rockyb Exp $
|
|---|
| 6 | shopt -s extdebug
|
|---|
| 7 | print_debug_trap() {
|
|---|
| 8 | echo "debug lineno: $1 ${FUNCNAME[1]}"
|
|---|
| 9 | return
|
|---|
| 10 | }
|
|---|
| 11 |
|
|---|
| 12 | print_return_trap() {
|
|---|
| 13 | echo "return lineno: $1 ${FUNCNAME[1]}"
|
|---|
| 14 | return
|
|---|
| 15 | }
|
|---|
| 16 |
|
|---|
| 17 | fn1() {
|
|---|
| 18 | echo "LINENO $LINENO"
|
|---|
| 19 | echo "LINENO $LINENO"
|
|---|
| 20 | echo "BASH_SOURCE[0]" ${BASH_SOURCE[0]}
|
|---|
| 21 | echo "FUNCNAME[0]" ${FUNCNAME[0]}
|
|---|
| 22 | echo `caller`
|
|---|
| 23 | echo `caller 0`
|
|---|
| 24 | echo `caller 1`
|
|---|
| 25 | echo `caller foo`
|
|---|
| 26 | }
|
|---|
| 27 |
|
|---|
| 28 | fn2() {
|
|---|
| 29 | echo "fn2 here. Calling fn1..."
|
|---|
| 30 | fn1
|
|---|
| 31 | }
|
|---|
| 32 |
|
|---|
| 33 | fn3() {
|
|---|
| 34 | echo "LINENO $LINENO"
|
|---|
| 35 | echo "BASH_SOURCE[0]" ${BASH_SOURCE[0]}
|
|---|
| 36 |
|
|---|
| 37 | # Print a stack trace
|
|---|
| 38 | declare -i n
|
|---|
| 39 | n=${#FUNCNAME[@]}
|
|---|
| 40 | for (( i=0 ; (( i < $n )) ; i++ )) ; do
|
|---|
| 41 | local -i j=i+1
|
|---|
| 42 | [ $j -eq $n ] && j=i # main()'s file is the same as the first caller
|
|---|
| 43 | echo "${FUNCNAME[$i]} called from file " \
|
|---|
| 44 | "\`${BASH_SOURCE[$j]}' at line ${BASH_LINENO[$j]}"
|
|---|
| 45 | done
|
|---|
| 46 | source ./dbg-support.sub
|
|---|
| 47 | }
|
|---|
| 48 |
|
|---|
| 49 | fn4() {
|
|---|
| 50 | echo "fn4 here. Calling fn3..."
|
|---|
| 51 | fn3
|
|---|
| 52 | }
|
|---|
| 53 |
|
|---|
| 54 |
|
|---|
| 55 | #!../bash
|
|---|
| 56 | #
|
|---|
| 57 | # Test of support for debugging facilities in bash
|
|---|
| 58 | #
|
|---|
| 59 | # Test debugger set option functrace - set on. Not in vanilla Bash 2.05
|
|---|
| 60 | #
|
|---|
| 61 | set -o functrace
|
|---|
| 62 | trap 'print_debug_trap $LINENO' DEBUG
|
|---|
| 63 | trap 'print_return_trap $LINENO' RETURN
|
|---|
| 64 |
|
|---|
| 65 | # Funcname is now an array, but you still can't see it outside a function
|
|---|
| 66 | echo "FUNCNAME" ${FUNCNAME[0]:-main}
|
|---|
| 67 |
|
|---|
| 68 | # We should trace into the below.
|
|---|
| 69 | # Start easy with a simple function.
|
|---|
| 70 | fn1
|
|---|
| 71 | fn2
|
|---|
| 72 | fn3
|
|---|
| 73 | source ./dbg-support.sub
|
|---|
| 74 |
|
|---|
| 75 | # Test debugger set option functrace - set off
|
|---|
| 76 | set +T
|
|---|
| 77 |
|
|---|
| 78 | # We should not trace into this.
|
|---|
| 79 | fn1
|
|---|
| 80 | fn2
|
|---|
| 81 | fn3
|
|---|
| 82 | fn4
|
|---|
| 83 | source ./dbg-support.sub
|
|---|
| 84 |
|
|---|
| 85 | # Another way to say: set -o functrace
|
|---|
| 86 | set -T
|
|---|
| 87 |
|
|---|
| 88 | # We should trace into this.
|
|---|
| 89 | source ./dbg-support.sub
|
|---|
| 90 | set +T
|
|---|
| 91 |
|
|---|
| 92 | # Test that the line numbers in the presence of conditionals are correct.
|
|---|
| 93 | for (( i=0 ; (( i <= 2 )) ; i++ )) ; do
|
|---|
| 94 | if [ $i -eq 2 ] ; then
|
|---|
| 95 | echo "Hit 2"
|
|---|
| 96 | fi
|
|---|
| 97 | j=4
|
|---|
| 98 | done
|
|---|
| 99 |
|
|---|
| 100 | #
|
|---|
| 101 | # Check line numbers in command substitution
|
|---|
| 102 | #
|
|---|
| 103 | echo $(sourced_fn)
|
|---|
| 104 | echo `sourced_fn`
|
|---|
| 105 | x=$((sourced_fn))
|
|---|
| 106 | x={ sourced_fn }
|
|---|
| 107 |
|
|---|
| 108 | # Make sure we step into sourced_fn as a comand when we request to do so.
|
|---|
| 109 | # Vanilla bash 2.0 doesn't do.
|
|---|
| 110 | set -o functrace
|
|---|
| 111 | x={ sourced_fn }
|
|---|
| 112 |
|
|---|
| 113 | # Should see line number of xyzzy below. Vanilla bash 2.05b doesn't do
|
|---|
| 114 | case xyzzy in
|
|---|
| 115 | a )
|
|---|
| 116 | x=5
|
|---|
| 117 | ;;
|
|---|
| 118 | xyzz? )
|
|---|
| 119 | case 3 in
|
|---|
| 120 | 2 )
|
|---|
| 121 | x=6 ;;
|
|---|
| 122 | 3 )
|
|---|
| 123 | echo "got it" ;;
|
|---|
| 124 | * ) echo "no good" ;;
|
|---|
| 125 | esac
|
|---|
| 126 | ;;
|
|---|
| 127 | * )
|
|---|
| 128 | esac
|
|---|
| 129 |
|
|---|
| 130 | # Should see line numbers for initial for lines.
|
|---|
| 131 | for i in 0 1 ; do
|
|---|
| 132 | for j in 3 4 ; do
|
|---|
| 133 | ((x=i+j))
|
|---|
| 134 | done
|
|---|
| 135 | done
|
|---|
| 136 | #;;; Local Variables: ***
|
|---|
| 137 | #;;; mode:shell-script ***
|
|---|
| 138 | #;;; eval: (sh-set-shell "bash") ***
|
|---|
| 139 | #;;; End: ***
|
|---|