[lvm-devel] [PATCH] test: Fix stacktrace

Marian Csontos mcsontos at redhat.com
Fri Jul 14 17:51:59 UTC 2017


Changes:

- BASH_SOURCE index was one off.
- The first line of stacktrace was pure confusion displaying executed
  script together with innermost line number (which was either 125 when
  STACKTRACE or 229 when skip was called.)
- We can safely ignore innermost call, as stack trace is always produced
  by stacktrace function.
- It is safer to test for array length, instead of testing FUNCNAME is
  main - if main function were introduced.
- Bashishm is safe to use as this function as a whole is relying on bash.
---
 test/lib/utils.sh | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/test/lib/utils.sh b/test/lib/utils.sh
index 4d46ca9..61ccf9b 100644
--- a/test/lib/utils.sh
+++ b/test/lib/utils.sh
@@ -109,11 +109,14 @@ grep1_() {
 
 stacktrace() {
 	trap - ERR
-	local i=0
-
-	echo "## - $0:${BASH_LINENO[0]}"
-	while FUNC=${FUNCNAME[$i]}; test "$FUNC" != "main"; do
-		echo "## $i ${FUNC}() called from ${BASH_SOURCE[$i]}:${BASH_LINENO[$i]}"
+	# i=1 - ignoring innermost frame - it is always stacktrace function
+	local i=1 n=${#BASH_LINENO[*]}
+	# n-=1 - ignoring last frame as well - it is not interesting
+	let n-=1
+
+	echo "## - $0:${BASH_LINENO[$((n-1))]}"
+	while [[ $i -lt $n ]]; do
+		echo "## $i ${FUNCNAME[$i]}() called from ${BASH_SOURCE[$((i+1))]}:${BASH_LINENO[$i]}"
 		i=$(( i + 1 ))
 	done
 }
-- 
1.8.3.1




More information about the lvm-devel mailing list