我想用 ftrace 跟踪特定的函数,但要从该函数进一步调用。
我已经设法在我想要的函数上使用过滤器启动 ftrace,但现在它只向我显示了这个被调用的特定函数。
所以我的问题是:如何打印从特定函数调用的所有函数、这些函数调用的函数等等?
我想用 ftrace 跟踪特定的函数,但要从该函数进一步调用。
我已经设法在我想要的函数上使用过滤器启动 ftrace,但现在它只向我显示了这个被调用的特定函数。
所以我的问题是:如何打印从特定函数调用的所有函数、这些函数调用的函数等等?
您还可以设置 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
我能够解决这个问题。这是以 kmalloc 为例的解决方案。
cd /sys/kernel/debug/tracing
echo kmalloc > set_graph_function
echo function_graph > current_tracer
cat trace
请务必在使用 function_graph 之前重置所有过滤器(如 set_ftrace_filter)。