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

mhl*_*mhl 3 linux ftrace linux-kernel

我想用ftrace跟踪特定的函数,但是需要来自该函数的所有进一步调用.

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

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

mhl*_*mhl 5

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

cd /sys/kernel/debug/tracing
echo kmalloc > set_graph_function
echo function_graph > current_tracer
cat trace
Run Code Online (Sandbox Code Playgroud)

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


K_K*_*K_K 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
Run Code Online (Sandbox Code Playgroud)

启用跟踪: 在此示例中,我已选择过滤器功能为"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