git: a4e7810f7137 - main - debug.sh check for :debug_add:
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Mon, 04 Nov 2024 20:31:05 UTC
The branch main has been updated by sjg: URL: https://cgit.FreeBSD.org/src/commit/?id=a4e7810f71376ee43c47b6b092d11e582c80fe9d commit a4e7810f71376ee43c47b6b092d11e582c80fe9d Author: Simon J. Gerraty <sjg@FreeBSD.org> AuthorDate: 2024-11-04 20:30:01 +0000 Commit: Simon J. Gerraty <sjg@FreeBSD.org> CommitDate: 2024-11-04 20:30:01 +0000 debug.sh check for :debug_add: When we match a tag and turn tracing, see if we have any $DEBUG_ON:debug_add:tag in DEBUG_SH and if so add the new tag. This allows for more focused debugging during boot. Reviewed by: stevek --- libexec/rc/debug.sh | 84 ++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 73 insertions(+), 11 deletions(-) diff --git a/libexec/rc/debug.sh b/libexec/rc/debug.sh index b098f0b359b5..db9ed8c94b6c 100755 --- a/libexec/rc/debug.sh +++ b/libexec/rc/debug.sh @@ -31,6 +31,11 @@ # If the '-o' flag is given, tracing is turned off unless there # was a matched "tag", useful for functions too noisy to tace. # +# Further; when we set "DEBUG_ON" if we find +# "$DEBUG_ON:debug_add:tag" in "DEBUG_SH" we will +# add the new "tag" to "DEBUG_SH" so it only has effect after that +# point. +# # DebugOff turns tracing on if any "tag" matches "DEBUG_OFF" or # off if any "tag" matches "DEBUG_ON". This allows nested # functions to not interfere with each other. @@ -78,7 +83,7 @@ # Simon J. Gerraty <sjg@crufty.net> # RCSid: -# $Id: debug.sh,v 1.41 2024/10/22 17:57:22 sjg Exp $ +# $Id: debug.sh,v 1.42 2024/10/30 18:23:19 sjg Exp $ # # @(#) Copyright (c) 1994-2024 Simon J. Gerraty # @@ -97,30 +102,82 @@ _DEBUG_SH=: Myname=${Myname:-`basename $0 .sh`} -# We want to use local if we can -# if isposix-shell.sh has been sourced isPOSIX_SHELL will be set -# as will local -case "$local" in -local|:) ;; -*) +DEBUGGING= +DEBUG_DO=: +DEBUG_SKIP= +export DEBUGGING DEBUG_DO DEBUG_SKIP + +case "$isPOSIX_SHELL,$local" in +:,:|:,local|false,:) ;; # sane +*) # this is the bulk of isposix-shell.sh if (echo ${PATH%:*}) > /dev/null 2>&1; then + # true should be a builtin, : certainly is + isPOSIX_SHELL=: + # you need to eval $local var local=local + : KSH_VERSION=$KSH_VERSION + case "$KSH_VERSION" in + Version*) local=: ;; # broken + esac else + isPOSIX_SHELL=false local=: + false() { + return 1 + } fi ;; esac -DEBUGGING= -DEBUG_DO=: -DEBUG_SKIP= -export DEBUGGING DEBUG_DO DEBUG_SKIP +is_posix_shell() { + $isPOSIX_SHELL + return +} + + +## +# _debugAdd match +# +# Called from _debugOn when $match also appears in $DEBUG_SH with +# a suffix of :debug_add:tag we will add tag to DEBUG_SH +# +_debugAdd() { + eval $local tag + + for tag in `IFS=,; echo $DEBUG_SH` + do + : tag=$tag + case "$tag" in + $1:debug_add:*) + if is_posix_shell; then + tag=${tag#$1:debug_add:} + else + tag=`expr $tag : '.*:debug_add:\(.*\)'` + fi + case ",$DEBUG_SH," in + *,$tag,*) ;; + *) set -x + : _debugAdd $1 + DEBUG_SH=$DEBUG_SH,$tag + set +x + ;; + esac + ;; + esac + done + export DEBUG_SH +} + ## # _debugOn match first # # Actually turn on tracing, set $DEBUG_ON=$match # +# Check if $DEBUG_SH contains $match:debug_add:* and call _debugAdd +# to add the suffix to DEBUG_SH. This useful when we only want +# to trace some script when run under specific circumstances. +# # If we have included hooks.sh $_HOOKS_SH will be set # and if $first (the first arg to DebugOn) is suitable as a variable # name we will run ${first}_debugOn_hooks. @@ -133,6 +190,11 @@ _debugOn() { DEBUG_DO= DEBUG_SKIP=: DEBUG_X=-x + # do this firt to reduce noise + case ",$DEBUG_SH," in + *,$1:debug_add:*) _debugAdd $1;; + *,$2:debug_add:*) _debugAdd $2;; + esac set -x DEBUG_ON=$1 case "$_HOOKS_SH,$2" in