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

转载: http://blog.csdn.net/ronliu/article/details/6446251

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

  1. # cat /boot/config-2.6.36 | grep FTRACE
  2. CONFIG_HAVE_FTRACE_NMI_ENTER=y
  3. CONFIG_HAVE_DYNAMIC_FTRACE=y
  4. CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
  5. CONFIG_FTRACE_NMI_ENTER=y
  6. CONFIG_FTRACE=y #FTRACE打开后,编译内核时会打开-pg选项。
  7. CONFIG_FTRACE_SYSCALLS=y
  8. CONFIG_DYNAMIC_FTRACE=y
  9. CONFIG_FTRACE_MCOUNT_RECORD=y
  10. # 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. http://www.ibm.com/developerworks/cn/linux/l-cn-ftrace/index.html

使用ftrace学习linux内核函数调用的更多相关文章

  1. 源码分析:动态分析 Linux 内核函数调用关系

    源码分析:动态分析 Linux 内核函数调用关系 时间 2015-04-22 23:56:07  泰晓科技 原文  http://www.tinylab.org/source-code-analysi ...

  2. 使用 ftrace 调试 Linux 内核【转】

    转自:http://blog.csdn.net/adaptiver/article/details/7930646 使用 ftrace 调试 Linux 内核,第 1 部分 http://blog.c ...

  3. 使用 ftrace 调试 Linux 内核,第 1 部分【转】

    转自:http://www.ibm.com/developerworks/cn/linux/l-cn-ftrace1/index.html ftrace 是 Linux 内核中提供的一种调试工具.使用 ...

  4. 使用 ftrace 调试 Linux 内核,第1部分

    ftrace 是 Linux 内核中提供的一种调试工具.使用 ftrace 可以对内核中发生的事情进行跟踪,这在调试 bug 或者分析内核时非常有用.本系列文章对 ftrace 进行了介绍,分为三部分 ...

  5. Linux系统的理解及学习Linux内核的心得

    作业列表      (点击作业跳转) linux内核分析作业:以一简单C程序为例,分析汇编代码理解计算机如何工作 linux内核分析作业:操作系统是如何工作的进行:完成一个简单的时间片轮转多道程序内核 ...

  6. 以Qemu模拟Linux,学习Linux内核

    文章名称:以Qemu模拟Linux,学习Linux内核作      者:five_cent文章地址:http://www.cnblogs.com/senix/archive/2013/02/21/29 ...

  7. Linux内核(16) - 高效学习Linux内核

    世界悲结束了,章鱼哥也退役了,连非诚勿扰中的拜金女也突然的少了很多.这本<Linux内核修炼之道>在卓越.当当.china-pub上也已经开卖了,虽然是严肃文学,但为了保证流畅性,大部分文 ...

  8. 使用 ftrace 调试 Linux 内核,第 3 部分

    内核头文件 include/linux/kernel.h 中描述了 ftrace 提供的工具函数的原型,这些函数包括 trace_printk.tracing_on/tracing_off 等.本文通 ...

  9. 使用 ftrace 调试 Linux 内核,第 2 部分

    ftrace 操作概述 使用 ftrace 提供的跟踪器来调试或者分析内核时需要如下操作: 切换到目录 /sys/kernel/debug/tracing/ 下 查看 available_tracer ...

随机推荐

  1. OAuth授权之回调accessToken

    具体说明见新浪官方文档 http://open.weibo.com/wiki/Oauth2/access_token   具体实现 第一步 打开回调页面 // 宏定义client_id #define ...

  2. 通过工厂模式批量创建对象后调用其中方法 出现XXXis not a function()问题原因

    //通过工厂模式批量创建 function Computer(color,weight,logo){         var obj=new Object();         obj.color=c ...

  3. [LUOGU] P2330 [SCOI2005]繁忙的都市

    题目描述 城市C是一个非常繁忙的大都市,城市中的道路十分的拥挤,于是市长决定对其中的道路进行改造.城市C的道路是这样分布的:城市中有n个交叉路口,有些交叉路口之间有道路相连,两个交叉路口之间最多有一条 ...

  4. Ubuntu 下的aegisub安装

    大家用开源的软件用习惯了.推荐大家使用一下字幕编辑软件 分享的是Ubuntu下的安装教程: $ sudo add-apt-repository ppa:djcj/aegisub $ sudo apt- ...

  5. awk之NF的妙用

       在awk中大家都知道NF的作用,它是一个awk的内建变量,代表是每行的字段数量.常用的几种方式我给大家慢慢到来.最多的就是在读取每个字段内容 for(i=1;i<=NF;i++) 这个运用 ...

  6. pep-8要求归纳

    代码布局缩进每个缩进级别使用4个空格. 连续行应使用Python的隐式行连接括号,括号和大括号,或使用悬挂缩进 来垂直对齐包装元素.当使用悬挂式缩进时,应考虑以下内容:第一行应该没有任何争论,应该使用 ...

  7. Java-得到类的包

    package com.tj; public class MyClass2 { public static void main(String[] args) { Class cls = java.la ...

  8. HDU 4426 Palindromic Substring

    Palindromic Substring Time Limit: 10000ms Memory Limit: 65536KB This problem will be judged on HDU. ...

  9. [android 应用框架api篇] bluetooth

    bluetooth接口 android.bluetooth.jar 官网网址: 接口类: https://developer.android.com/reference/android/bluetoo ...

  10. 【luogu】P1772物流运输(最短路+DP)

    题目链接 对于本题我们设ext[i][j]计算第i个码头在前j天总共有几天不能用(其实就一前缀和),设dis[i][j]是从第i天到第j天不变运输路线的最短路径,设f[i]是前i天运输货物的最小花费. ...