517591c2e69e6485433381f79b125017b0345add
[platform/upstream/bash.git] / tests / dbg-support.tests
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: ***