Add call trace in error message
Call trace can help user to locate problem quickly. stack.sh uses bash as interpreter, which defines a series of "Shell Variables": BASH_SOURCE: An array variable whose members are the source filenames BASH_LINENO: An array variable whose members are the line numbers in source files where each corresponding member of FUNCNAME was invoked. FUNCNAME: An array variable containing the names of all shell functions currently in the execution call stack. run "man bash" and search the variable name to get detailed info. In function backtrace, it gets the call deepth from ${#BASH_SOURCE[@]}, then print the call stack from top to down. In function die, backtrace is called with parameter "2" to ignore the call trace of function "die" and "backtrace". I add a broken function in lib/database, and call it in stack.sh, the output looks like this: [Call Trace] ./stack.sh:104:broken /home/kui/osd/devstack/lib/database:24:die [ERROR] ./stack.sh:24 It is broken Fixes bug # 1207660 Change-Id: I04d0b3ccf783c769e41582c20f48694c19917334
This commit is contained in:
parent
9cdc0a17ce
commit
5e28a3e2d2
14
functions
14
functions
@ -76,6 +76,19 @@ function cp_it {
|
||||
}
|
||||
|
||||
|
||||
# Prints backtrace info
|
||||
# filename:lineno:function
|
||||
function backtrace {
|
||||
local level=$1
|
||||
local deep=$((${#BASH_SOURCE[@]} - 1))
|
||||
echo "[Call Trace]"
|
||||
while [ $level -le $deep ]; do
|
||||
echo "${BASH_SOURCE[$deep]}:${BASH_LINENO[$deep-1]}:${FUNCNAME[$deep-1]}"
|
||||
deep=$((deep - 1))
|
||||
done
|
||||
}
|
||||
|
||||
|
||||
# Prints line number and "message" then exits
|
||||
# die $LINENO "message"
|
||||
function die() {
|
||||
@ -85,6 +98,7 @@ function die() {
|
||||
if [ $exitcode == 0 ]; then
|
||||
exitcode=1
|
||||
fi
|
||||
backtrace 2
|
||||
err $line "$*"
|
||||
exit $exitcode
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user