Bash:如何在错误上获得调用链?
发布时间:2020-12-15 16:59:31 所属栏目:安全 来源:网络整理
导读:我在bash中有一个后跟踪功能,运行良好(下面的代码),但问题是当它遇到错误时bash本身,它没有给出回溯或任何有助于确定调用者的信息,可以帮助调试问题. 例如.: ./c.sh: line 23: urgh: command not found function backtrace () { local deptn=${#FUNCNAME[@]
我在bash中有一个后跟踪功能,运行良好(下面的代码),但问题是当它遇到错误时bash本身,它没有给出回溯或任何有助于确定调用者的信息,可以帮助调试问题.
例如.:
function backtrace () { local deptn=${#FUNCNAME[@]} for ((i=1; i<$deptn; i++)); do local func="${FUNCNAME[$i]}" local line="${BASH_LINENO[$((i-1))]}" local src="${BASH_SOURCE[$((i-1))]}" printf '%*s' $i '' # indent echo "at: $func(),$src,line $line" done } 是否有可能在这些错误上捕获bash所以我可以调用自己的函数来获得这样的输出? at: c(),./c.sh,line 22 at: b(),line 11 at: main(),./b.sh,line 5 更新:建议和跟踪陷阱的最终工作版本出错: function backtrace () { local deptn=${#FUNCNAME[@]} for ((i=1; i<$deptn; i++)); do local func="${FUNCNAME[$i]}" local line="${BASH_LINENO[$((i-1))]}" local src="${BASH_SOURCE[$((i-1))]}" printf '%*s' $i '' # indent echo "at: $func(),line $line" done } function trace_top_caller () { local func="${FUNCNAME[1]}" local line="${BASH_LINENO[0]}" local src="${BASH_SOURCE[0]}" echo " called from: $func(),line $line" } set -o errtrace trap 'trace_top_caller' ERR
绝对 – 这正是错误陷阱的用途:
trap backtrace ERR 在过去,我隐约回想起有必要让那些东西更像陷阱“回溯”${#BASH_SOURCE [@]}“”${BASH_SOURCE [@]}“”${#BASH_LINENO [@]}“”${BASH_LINENO [@]}“’ERR解决一个错误(并从函数的argv中读取数组值);但是,我现在还不记得那个bug是什么以及它受影响的版本. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- scala – Spray routing:如何响应不同的内容类型?
- Bootstrap 3.3.4 发布,Web 前端 UI 框架
- 详解Linux下的sudo及其配置文件/etc/sudoers的详细配置
- WebService入门实例项目详细教程(图)
- Vim:更改/删除到“块”的末尾
- 发布 ng-alain 1.0.0 正式版
- CXF WebService整合Spring
- [Angular] Angular Custom Change Detection with ChangeDe
- list – 如何以惯用的方式在scala中创建嵌套的toSet?
- 访问下面的路径信息canDeactivate在新的angular2路由器中