ubuntu 使用 ftrace 指南

一、基本用法

sudo su

cd /sys/kernel/debug/tracing/

echo function > current_tracer

备注: 其中 function 是系统支持的一种类型,查看所有的类型

cat available_tracers

echo 1 > tracing_on

// 等待一小会

echo 0 > tracing_on

cat trace | head -20

以上是基本用法,接下来是进阶用法:

二、进阶用法

2.1 跟踪的函数

 

set_ftrace_filter 表示要跟踪的函数,dev_attr_show 要根据具体哪个函数

echo dev_attr_show > set_ftrace_filter

2.2 查看函数调用栈

函数内部添加

 

WARN_ON(1)

终端窗口

 

echo 1 > options/func_stack_trace

2.3 跟踪执行时间短的命令

ftrace 过滤控制相关文件:

 

set_ftrace_filter function tracer 只跟踪某个函数

set_ftrace_notrace function tracer 不跟踪某个函数

set_graph_function function_graph tracer 只跟踪某个函数

set_graph_notrace function_graph tracer 不跟踪某个函数

set_event_pid trace event 只跟踪某个进程

set_ftrace_pid function/function_graph tracer 只跟踪某个进程

调试 kill 的内核执行流程,如何办呢?

因为 kill 运行时间很短,我们不能知道它的 pid,所以就没法过滤了。

可以使用如下脚本:

 

sh -c "echo $$ > set_ftrace_pid; echo 1 > tracing_on; kill xxx; echo 0 > tracing_on"

2.4 如何跟踪过滤多个进程?多个函数?

  1. 函数名相同的用法

 

# echo 'dev_attr_*' > set_ftrace_filter

# cat set_ftrace_filter

dev_attr_store

dev_attr_show

  1. 在上面的基础上追加函数 ip_rcv
 

# echo ip_rcv >> set_ftrace_filter

# cat set_ftrace_filter

dev_attr_store

dev_attr_show

ip_rcv

  1. 模块过滤

格式为:<function>:<command>:<parameter>,例如,过滤 ext3 module 的 write* 函数:

 

$ echo 'write*:mod:ext3' > set_ftrace_filter

  1. 从过滤列表中删除某个函数

感叹号用来移除某个函数,把上面追加的 ip_rcv 去掉:

 

# cd /sys/kernel/debug/tracing

# cat set_ftrace_filter

dev_attr_store

dev_attr_show

ip_rcv

# echo '!ip_rcv' >> set_ftrace_filter

# cat set_ftrace_filter

dev_attr_store

dev_attr_show

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值