在 Bash 中显示调用堆栈

Hus*_*bar 1 linux bash trace

首先,我不知道这是不是一些琐碎的常识;我不知道,所以在这里问。

我正在运行一个 3rd 方应用程序并试图确定一个我需要找出调用堆栈的问题。

当我调用 Bash 脚本时,它会调用许多其他脚本和二进制文件,处理内容并退出。

我需要的是一种准确找出它调用的脚本和二进制文件的方法。pstree 显示一个堆栈,但仅用于当前正在执行的进程。

kyb*_*kyb 15

function stacktrace { 
   local i=1 line file func
   while read -r line func file < <(caller $i); do
      echo >&2 "[$i] $file:$line $func(): $(sed -n ${line}p $file)"
      ((i++))
   done
}
Run Code Online (Sandbox Code Playgroud)

来自https://gitlab.com/kyb/autorsync/-/blob/master/utils.bash#L84

  • 与接受的答案不同,这实际上提供了问题中请求的堆栈跟踪。bash -x 有很多噪音;这个答案只打印OP要求的内容。 (3认同)

che*_*ner 5

使用 运行脚本bash -x,这将产生标准错误的输出以显示执行的每个命令。