Jari Aalto | b80f644 | 2004-07-27 13:29:18 +0000 | [diff] [blame] | 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 | # |
Jari Aalto | 95732b4 | 2005-12-07 14:08:12 +0000 | [diff] [blame] | 59 | # Test debugger set option functrace - set on. Not in vanilla Bash 2.05 |
Jari Aalto | b80f644 | 2004-07-27 13:29:18 +0000 | [diff] [blame] | 60 | # |
| 61 | set -o functrace |
| 62 | trap 'print_debug_trap $LINENO' DEBUG |
| 63 | trap 'print_return_trap $LINENO' RETURN |
| 64 | |
Jari Aalto | eb87367 | 2004-11-09 21:37:25 +0000 | [diff] [blame] | 65 | # Funcname is now an array, but you still can't see it outside a function |
| 66 | echo "FUNCNAME" ${FUNCNAME[0]:-main} |
Jari Aalto | b80f644 | 2004-07-27 13:29:18 +0000 | [diff] [blame] | 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 | |
Jari Aalto | 95732b4 | 2005-12-07 14:08:12 +0000 | [diff] [blame] | 75 | # Test debugger set option functrace - set off |
Jari Aalto | b80f644 | 2004-07-27 13:29:18 +0000 | [diff] [blame] | 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 | |
Jari Aalto | 95732b4 | 2005-12-07 14:08:12 +0000 | [diff] [blame] | 85 | # Another way to say: set -o functrace |
Jari Aalto | b80f644 | 2004-07-27 13:29:18 +0000 | [diff] [blame] | 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 |
Chet Ramey | 0001803 | 2011-11-21 20:51:19 -0500 | [diff] [blame] | 136 | |
| 137 | ${THIS_SH} ./dbg-support3.sub |
| 138 | |
Jari Aalto | b80f644 | 2004-07-27 13:29:18 +0000 | [diff] [blame] | 139 | #;;; Local Variables: *** |
| 140 | #;;; mode:shell-script *** |
| 141 | #;;; eval: (sh-set-shell "bash") *** |
| 142 | #;;; End: *** |