我希望使用ftrace跟踪特定函数,但是要使用该函数的所有进一步调用。
我已经设法在我想要的功能上使用过滤器启动ftrace,但现在它只显示了这个特定的函数。
所以我的问题是:如何打印从特定函数调用的所有函数,这些函数调用的函数等等?
答案 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将禁用跟踪
答案 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)。