ftrace 跟踪函数调用

本文介绍了一种在Linux内核中使用kprobe进行函数跟踪的方法。具体步骤包括挂载debugfs文件系统、设置当前跟踪器为nop、定义探针事件以在目标函数进入和退出时触发、启用跟踪功能并打印函数参数。

步骤:

1. mount -t debugfs nodev /sys/kenrel/debug 

2 .echo nop > /sys/kernel/debug/tracing/current_tracer 

3. echo 'p:myprobe1 vfs_fsync_range' >> /sys/kernel/debug/tracing/kprobe_events    //进入函数时执行

echo ''r:myret1 vfs_fsync_range  $retral'   >> /sys/kernel/debug/tracing/kprobe_events    // 返回值记录时间 

4. echo 1 >> ... tracing_on    tracing_enable 

5. echo 1 >> /sys/kernel/debug/tracing/events/kprobes/myret1/enable 

6. echo 'p: probe1 do_brk addr=%r0 len=%r1' >> /sys/kenrel/debug/tracing/kprobevents    打印函数传入的参数值 

ftrace跟踪用户态函数可通过以下方法和技术实现: - **使用trace_marker**:ftrace的trace_marker功能可在系统的ftrace生成物里嵌入额外信息,主要在用户态使用。通过echo一段内容或者直接写内容到trace_marker节点,能把额外日志信息嵌入到ftrace的trace文件生成物里 [^2]。Systrace利用ftrace提供了供用户程序调用的接口,Java层是`Trace.traceBegin(tag, name)/Trace.traceEnd(tag)`;Native层是`ATRACE_BEGIN(name)/ATRACE_END()`。也可以根据特定需求,使用systrace现成的tag,还能将systrace设置tag和手动设置sched调度的event filfter搭配使用。若想关闭用户态的信息打印也是可行的 [^1]。 - **开关trace_marker**:可控制用户态信息的输出,实现用户态信息和内核信息的同步 [^1]。 - **代码中控制跟踪**:在跟踪模块运行状况时,使用ftrace命令操作序列在用户态进行必要的设置。在代码中可通过`traceing_on()`控制在进入特定代码区域时开启跟踪信息,在遇到某些条件时通过`tracing_off()`暂停。查看完感兴趣的信息后,将1写入`tracing_on`文件可继续记录跟踪信息。实践中,可通过宏来控制是否将对这些函数的调用编译进内核模块,便于在调试时开启,最终发布时关闭 [^3]。 ### 代码示例 以下是Java层和Native层使用ftrace接口的简单示例: ```java // Java层示例 import android.os.Trace; public class UserTraceExample { public static void doWork() { Trace.traceBegin(Trace.TRACE_TAG_APP, "doWork"); // 模拟一些工作 try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } Trace.traceEnd(Trace.TRACE_TAG_APP); } } ``` ```c // Native层示例 #include <utils/Trace.h> void doNativeWork() { ATRACE_BEGIN("doNativeWork"); // 模拟一些工作 sleep(1); ATRACE_END(); } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值