4

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

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

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

4

2 回答 2

6

您还可以设置 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.com/2014/12/generating-function-graph-in-linux.html

于 2014-12-30T06:22:20.903 回答
5

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

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

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

于 2013-02-19T12:49:45.383 回答