如何从Linux中的ftrace中的特定函数开始获取完整的调用图?

时间:2013-02-19 11:36:18

标签: linux linux-kernel ftrace

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

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

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

2 个答案:

答案 0 :(得分:5)

您还可以设置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

启用跟踪: 在此示例中,我选择了过滤器函数作为“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.in/2014_12_01_archive.html

答案 1 :(得分:4)

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

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

在使用function_graph之前,请务必重置所有过滤器(如set_ftrace_filter)。