博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用ftrace学习linux内核函数调用
阅读量:6695 次
发布时间:2019-06-25

本文共 1442 字,大约阅读时间需要 4 分钟。

http://www.cnblogs.com/pengdonglin137/articles/4752082.html 

转载: 

 

linux中大量使用函数指针钩子,导致阅读代码困难。比如想知道一个函数的调用路径,那么就只能用source insight之类的工具看代码了。有没有办法可以迅速获得调用关系的整体印象?ftrace是内核提供的一种调试工具,可以对内核中发生的事情进行跟 踪。比如函数的调用,进程的切换,中断的开关等等。这里利用这个工具来跟踪函数的调用。

# cat /boot/config-2.6.36 | grep FTRACECONFIG_HAVE_FTRACE_NMI_ENTER=yCONFIG_HAVE_DYNAMIC_FTRACE=yCONFIG_HAVE_FTRACE_MCOUNT_RECORD=yCONFIG_FTRACE_NMI_ENTER=yCONFIG_FTRACE=y                           #FTRACE打开后,编译内核时会打开-pg选项。CONFIG_FTRACE_SYSCALLS=yCONFIG_DYNAMIC_FTRACE=yCONFIG_FTRACE_MCOUNT_RECORD=y# CONFIG_FTRACE_STARTUP_TEST is not set

 

mkdir  /debug 

mount -t debugfs nodev /debug   #挂载debugfs。ftrace使用debugfs作为配置工具 
cd tracing     #检查是否存在tracing文件夹。如果不存在,当前内核不支持ftrace,需要重新编译。 
tracing文件夹中有很多文件用于配置ftrace工具。

echo nop > current_tracer   #清楚当前tracer。执行该操作,会将pid等清空。 

echo function > current_tracer  #跟踪函数调用 
echo 1 > tracing_enabled  #打开ftrace开始跟踪 
echo 0 > tracing_enabled  #关闭ftrace停止跟踪 
cat trace | less  # 读trace文件。可以使用vim等工具。

 
echo 1 > set_ftrace_pid    #跟踪单个进程(内核线程)的函数调用。有效值大于0。如果echo  > set_ftrace_pid则清空该选项。

echo function_graph > current_tracer  #以图形化的方式跟踪函数调用。如下图所示。效果非常好。

  
默认情况下,会捕获所有的内核函数调用。可以使用下面的命令进行过滤,只捕获关心的函数调用。 
echo sys_socket > set_graph_function    #可以写多个函数。也可以使用通配符*,如sys_*。 
cat available_filter_functions | grep sys_   #查询ftrace支持的包含sys_字符的函数。注意,内核中使用EXPORT_SYMBOL声明的函数才能使用ftrace跟踪。

参考文档: 

1. ftrace使用手册:kernel-srctree/Documentation/trace/ftrace.txt 
2. ftrace设计文档:kernel-srctree/Documentation/trace/ftrace-design.txt 
3. 

你可能感兴趣的文章
Nordic Collegiate Programming Contest 2016
查看>>
基础复习-算法设计基础 | 复杂度计算
查看>>
201671010128 2017-09-17《Java程序设计》之步步深入面向对象
查看>>
Linux内核在I386架构下的内存管理
查看>>
打包文件 MANIFEST.MF 功能详解
查看>>
构建vue单页应用(一)
查看>>
最小公倍数
查看>>
HDOJ_ACM_Can you find it?
查看>>
SpringMVC-常用的注解
查看>>
羊车门问题
查看>>
用substr()截取中文出现乱码的解决方法
查看>>
Java练习 SDUT-2400_高中数学?
查看>>
UGUI组件之InputField 组件简单笔记(输入栏 输入框 )
查看>>
java-随学随记之基础篇
查看>>
Linux 统计文件夹,文件数量的命令
查看>>
spring hibernate实现动态替换表名(分表)
查看>>
精通ArrayList,关于ArrayList你想知道的一切
查看>>
KeyStore和TrustStore
查看>>
iOS - WKWebView加载不受信任的https (因用到IP地址加端口号去请求数据)
查看>>
vs和vim
查看>>