zoukankan      html  css  js  c++  java
  • 28、应用调试之strace命令来跟踪系统调用

    strace是个工具,在使用时需要先按照,见韦东山书籍:

    1、tar xjf starce-4.5.15.tar.bz2

    2、cd strace-4.5.15/

    3、patch -p1 < ../strace-fix-arm-bad-syscall.patch

    4、./configure --host=arm-linux CC=arm-linux-gcc

    5、make

    会在strace-4.5.15目录下生成一个名为strace的可执行程序,将它复制到开发板根文件系统的bin中即可使用

    简单使用举例:

    1、执行strace -o log.txt ./firstdrv on

    2、参看log.txt可以参看应用程序执行过程中调用了哪些系统调用和调用库的过程

    strace使用可以跟踪开发板上执行的所有指令,只需要在指令前面加上strace -o log.txt

    strace用法的原理:strace是父进程,执行的指令是子进程,应用程序执行时的read等系统调用就是产生一个swi #val异常指令,进入内核异常处理函数ENTRY(vector_swi)中,内核根据val调用相应的sys_read函数

    adr tbl, sys_call_table   //sys_call_table   包含有各个系统调用,是通过在ENTRY(sys_call_table)

                                     #include "calls.S"的方式来定义系统跳转标的

    ‘’‘’

    ldrcc pc, [tbl, scno, lsl #2] @ call sys_* routine //根据scno执行响应的系统调用

    内核中ENTRY(vector_swi)在执行的时候,其里面有个判断语句“tst ip,#_TIF_SYSCALL_TRACE”应该是根据某个标志位测试应用程序是否被父进程跟踪,如果被跟踪,调用__sys_trace,接着调用syscall_trace  ,会给父进程发信号,并且休眠,等待父进程相应后(比如记录系统调用)子进程才继续执行

  • 相关阅读:
    js 数组操作常用方法
    如何成为一名卓越的前端工程师
    js实现日期显示的一些操作
    JavaScript 创建对象的七种方式
    ios微信浏览器音乐自动播放
    Mac下新建.开头的隐藏文件
    JavaScript判断浏览器UA 、 添加收藏 、设置首页 、调用本地邮箱发送邮件
    获取当前页面参数Hash和Search,或者当前Script的参数
    AJAX调用代码实例
    移动端兼容笔记整理
  • 原文地址:https://www.cnblogs.com/liusiluandzhangkun/p/8681870.html
Copyright © 2011-2022 走看看