• strace命令


    1.strace简介

    strace常用来跟踪进程执行时系统调用和所接收的信号。 在Linux世界,进程不能直接访问硬件设备,当进程需要访问硬件设备(比如读取磁盘文件,接收网络数据等等)时,必须由用户态模式切换至内核态模式,通过系统调用访问硬件设备。strace可以跟踪到一个进程产生的系统调用,包括参数,返回值,执行消耗的时间。

    2.编译、安装strace

    首先需要以下两个文件:

    strace-4.5.15.tar.bz2
    strace-fix-arm-bad-syscall.patch

    //1.解压
    #tar -xjf strace-4.5.15.tar.bz2
    #cd strace-4.5.15/
    //2.打补丁 #patch -p1 <../strace-fix-arm-bad-syscall.patch //-p1:表示从补丁文件中把第一个斜杠之前的东西去掉 // '<':指定补丁文件的位置
    //3.配置 #./configure --host=arm-linux CC=arm-linux-gcc //配置configure //4.编译 #make //生成strace命令文件

    将生成的strace拷贝到开发板上对应的目录就可以了

    3.strace的使用

    常用参数如下所示:

    -o 指定跟踪信息的输出文件
    -t 记录跟踪信息的时间,以S为单位
    -tt 记录跟踪信息的时间,以uS为单位

    3.1 卸载first_drv时出错

    insmod first_drv.ko

    rmmod  first_drv

    rmmod: chdir(/lib/modules) : No such file or directory

    此时可以利用strace命令来跟踪一下:

    strace -o  log.txt  rmmod  first_drv

    打开log.txt,你会看到这样的一句话:

    chdir(/lib/modules) = -1  ENOENT(No such file or directory)。说明没有/lib/modules目录

    此时需要创建 /lib/modules目录

    3.2 通过strace来测试led_text应用程序

    insmod led.ko

    strace  -o log.txt  ./led_text led1 on 

     4. strace 原理介绍

    stace是一个父进程,它会创建一个子进程,这个子进程会执行rmmod  first_drv这个命令。

    strace -o  log.txt   app

    在应用程序中调用c库函数,如open 、read、write时。注意这些库函数不是我们自己实现的,是在C库中实现的。
    比如在应用程序中调用open时,最终会调用swi那条指令加上某个值,即swi #val1
    比如在应用程序中调用read时,最终会调用swi那条指令加上某个值,即swi #val2
    比如在应用程序中调用write时,最终会调用swi那条指令加上某个值,即swi #val3
    swi指令会导致系统发生一个swi异常,就会进入到内核态,从而就会调用sys_open、sys_read、sys_write等系统函数
    在swi异常处理函数vector_swi中先判断一下APP子进程是否被父进程跟踪,如果被跟踪,应用程序会给父进程发一个信号。父进程就将其记录下来,然后让APP继续执行。

    注意:Open在内核里面的入口函数时sys_open

    本文比较简单的介绍了strace的基本使用方式

  • 相关阅读:
    mojoportal学习——文章翻译之超过3个内容面板
    mojoportal学习——文章翻译之mojoportal的皮肤模板
    mojoportal中替换第一层菜单中的连接为空连接
    mojoportal学习——文章翻译之不同的模块使用不同的风格
    mojoportal学习——文章翻译之layout.master文件
    mojoportal学习——文章翻译之mojoportal高级功能之菜单子站点化
    GridView选中行变色(无刷新)
    页面之间传递参数的几种方法荟萃
    ASP.NET程序中常用的三十三种代码(一)
    ASP.NET设计应用程序的七大绝招
  • 原文地址:https://www.cnblogs.com/-glb/p/12592612.html
Copyright © 2020-2023  润新知