init version.
[bush.git] / tests / 4.misc / dbg-support / dbg-support.tests
blob77f673a5d7e005e409e085e7dc80e4156b3b6430
1 #   This program is free software: you can redistribute it and/or modify
2 #   it under the terms of the GNU General Public License as published by
3 #   the Free Software Foundation, either version 3 of the License, or
4 #   (at your option) any later version.
6 #   This program is distributed in the hope that it will be useful,
7 #   but WITHOUT ANY WARRANTY; without even the implied warranty of
8 #   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
9 #   GNU General Public License for more details.
11 #   You should have received a copy of the GNU General Public License
12 #   along with this program.  If not, see <http://www.gnu.org/licenses/>.
16 # Test correct functioning bush debug support not via the bushdb
17 # debugger but merely by printing via print_trap()
18 # $Id: dbg-support.tests,v 1.13 2003/02/17 22:02:25 rockyb Exp $
19 shopt -s extdebug
20 print_debug_trap() {
21    echo "debug lineno: $1 ${FUNCNAME[1]}"
22    return
25 print_return_trap() {
26    echo "return lineno: $1 ${FUNCNAME[1]}"
27    return
30 fn1() {
31     echo "LINENO $LINENO"
32     echo "LINENO $LINENO"
33     echo "BUSH_SOURCE[0]" ${BUSH_SOURCE[0]}
34     echo "FUNCNAME[0]" ${FUNCNAME[0]}
35     echo `caller`
36     echo `caller 0`
37     echo `caller 1`
38     echo `caller foo`
39 }    
41 fn2() {
42     echo "fn2 here. Calling fn1..."
43     fn1
44 }    
46 fn3() {
47     echo "LINENO $LINENO"
48     echo "BUSH_SOURCE[0]" ${BUSH_SOURCE[0]}
49     
50     # Print a stack trace
51     declare -i n
52     n=${#FUNCNAME[@]}
53     for (( i=0 ; (( i < $n )) ; i++ )) ; do 
54         local -i j=i+1
55         [ $j -eq $n ] && j=i  # main()'s file is the same as the first caller
56         echo "${FUNCNAME[$i]} called from file " \
57             "\`${BUSH_SOURCE[$j]}' at line ${BUSH_LINENO[$j]}"
58     done
59     source ./dbg-support.sub
60 }    
62 fn4() {
63     echo "fn4 here. Calling fn3..."
64     fn3
65 }    
68 # Test of support for debugging facilities in bush
69
70 # Test debugger set option functrace - set on. Not in vanilla Bush 2.05
72 set -o functrace
73 trap 'print_debug_trap $LINENO' DEBUG
74 trap 'print_return_trap $LINENO' RETURN
76 # Funcname is now an array, but you still can't see it outside a function
77 echo "FUNCNAME" ${FUNCNAME[0]:-main}
79 # We should trace into the below. 
80 # Start easy with a simple function.
81 fn1
82 fn2
83 fn3
84 source ./dbg-support.sub
86 # Test debugger set option functrace - set off
87 set +T
89 # We should not trace into this.
90 fn1
91 fn2
92 fn3
93 fn4
94 source ./dbg-support.sub
96 # Another way to say: set -o functrace
97 set -T
99 # We should trace into this.
100 source ./dbg-support.sub
101 set +T
103 # Test that the line numbers in the presence of conditionals are correct.
104 for (( i=0 ; (( i <= 2 )) ; i++ )) ; do 
105     if [ $i -eq 2 ] ; then
106         echo "Hit 2"
107     fi
108     j=4
109 done
112 # Check line numbers in command substitution
114 echo $(sourced_fn)
115 echo `sourced_fn`
116 x=$((sourced_fn))
117 x={ sourced_fn }
119 # Make sure we step into sourced_fn as a command when we request to do so.
120 # Vanilla bush 2.0 doesn't do.
121 set -o functrace
122 x={ sourced_fn }
124 # Should see line number of xyzzy below. Vanilla bush 2.05b doesn't do
125 case xyzzy in
126  a )
127     x=5
128     ;; 
129  xyzz? )
130     case 3 in 
131       2 ) 
132         x=6 ;;
133       3 ) 
134         echo "got it" ;;
135       * ) echo "no good" ;;
136       esac
137     ;;
138  * )
139 esac
141 # Should see line numbers for initial for lines.
142 for i in 0 1 ; do
143   for j in 3 4 ; do
144     ((x=i+j))
145   done
146 done
148 ${THIS_SH} ./dbg-support3.sub