You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何利用ftrace过滤查看包含指定函数的完整调用栈?

如何用ftrace获取包含指定函数的完整调用图(含上游调用链)

是的,可以通过调整ftrace的配置,获取包含指定函数的完整调用链(包括调用它的上游函数和它调用的下游函数)。

原方法的局限

你之前使用set_graph_function = ksys_dup3的方式,只会从ksys_dup3开始追踪下游函数调用,所以会丢失上游的调用链路。要获取完整调用图,需要调整过滤和追踪的配置逻辑。

具体操作步骤

  1. 重置ftrace环境
    先清理现有配置,确保环境干净:
echo nop > /sys/kernel/debug/tracing/current_tracer
echo > /sys/kernel/debug/tracing/set_graph_function
echo > /sys/kernel/debug/tracing/set_ftrace_filter
echo 100 > /sys/kernel/debug/tracing/max_graph_depth  # 设置足够大的调用深度上限
  1. 配置function_graph追踪器与过滤规则
    启用函数调用图追踪,并指定只追踪涉及目标函数的调用路径:
echo function_graph > /sys/kernel/debug/tracing/current_tracer
echo ksys_dup3 > /sys/kernel/debug/tracing/set_ftrace_filter
  1. 触发目标函数调用
    在另一个终端执行会触发ksys_dup3的操作(例如调用dup3系统调用的程序或命令)。

  2. 查看完整调用图
    读取trace文件即可得到包含上下游的完整调用链:

cat /sys/kernel/debug/tracing/trace

示例输出

你会得到类似如下的完整调用图,包含从上游中断处理函数到ksys_dup3下游函数的完整层级:

# tracer: function_graph
#
# CPU  DURATION                  FUNCTION CALLS
# |     |   |                     |   |   |   |
  7)               |  el0_svc_handler() {
  7)               |    el0_svc_common() {
  7)               |      __arm64_sys_dup3() {
  7)               |        ksys_dup3() {
  7)   0.416 us    |          expand_files();
  7)               |          do_dup2() {
  7)               |            filp_close() {
  7)   0.405 us    |              dnotify_flush();
  7)   0.406 us    |              locks_remove_posix();
  7)               |              fput() {
  7)   0.416 us    |                fput_many();
  7)   1.269 us    |              }
  7)   3.819 us    |            }
  7)   4.746 us    |          }
  7)   6.475 us    |        }
  7)   7.381 us    |      }
  7)   8.362 us    |    }
  7)   9.205 us    |  }

核心原理

  • set_ftrace_filter = ksys_dup3会让ftrace记录所有调用ksys_dup3的上游函数路径,以及ksys_dup3自身调用的下游函数。
  • function_graph追踪器以嵌套格式展示函数调用的层级关系,清晰呈现完整调用链。
  • max_graph_depth用于避免因调用层级过深导致的截断,确保完整记录所有链路。

内容的提问来源于stack exchange,提问作者Daniel Kleinstein

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 14:18:09