【问题标题】:How to get the full call graph starting from a specific function with in ftrace in Linux?如何从 Linux 中的 ftrace 中的特定函数开始获取完整的调用图?
【发布时间】:2013-02-04 01:50:39
【问题描述】:

我想用 ftrace 跟踪特定的函数,但要跟踪该函数的所有进一步调用。

我已经设法在我想要的函数上使用过滤器启动 ftrace,但现在它只显示了这个被调用的特定函数。

所以我的问题是:如何打印从特定函数调用的所有函数、这些函数调用的函数等等?

【问题讨论】:

    标签: linux linux-kernel ftrace


    【解决方案1】:

    我能够解决问题。这里以 kmalloc 为例解决方案。

    cd /sys/kernel/debug/tracing
    echo kmalloc > set_graph_function
    echo function_graph > current_tracer
    cat trace
    

    确保在使用 function_graph 之前重置所有过滤器(如 set_ftrace_filter)。

    【讨论】:

      【解决方案2】:

      您还可以设置 max_graph_depth 并获得函数图的更多深度。

      以下步骤将有助于生成所选 linux 函数的函数图。

      1. cd /sys/kernel/debug/tracing
      2. cat /dev/null >  trace
      3. echo generic_make_request > set_graph_function
      4. echo 10 > max_graph_depth
      5. echo function_graph > current_tracer
      6. echo 1 > tracing_on
      7. dd if=/dev/sddk of=~/test bs=512 count=5
      8. cp trace ~/dd_trace_depth10
      9. echo 0 > tracing_on
      10. echo > set_graph_function
      11. echo 0 > max_graph_depth
      12. cat /dev/null >  trace
      

      启用跟踪: 在本例中,我选择了 filter 函数作为“generic_make_request”。因此,第 3 步将图形函数设置为“generic_make_request”linux 函数。然后我们在步骤 4 中将图形深度设置为 10。步骤 5 将当前跟踪器设置为“function_graph”。设置完所有这些后,我们启用跟踪。

      行动: 现在我们执行我们想要一个 linux 跟踪的操作。在本例中,我们使用 dd 命令执行 I/O。此命令将命中 generic_make_request 函数,文件 /sys/kernel/debug/tracing/trace 将被函数图填充。

      禁用跟踪: 步骤 9、10、11 将禁用跟踪

      参考:http://sklinuxblog.blogspot.com/2014/12/generating-function-graph-in-linux.html

      【讨论】:

        猜你喜欢
        • 2023-03-03
        • 2019-12-24
        • 2011-08-02
        • 2012-11-07
        • 2019-03-22
        • 2017-05-21
        • 1970-01-01
        • 2012-06-29
        • 1970-01-01
        相关资源
        最近更新 更多