• 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  ,会给父进程发信号,并且休眠,等待父进程相应后(比如记录系统调用)子进程才继续执行

  • 相关阅读:
    [Algorithm] Universal Value Tree Problem
    [HTML5] Using the focus event to improve navigation accessibility (nextElementSibling)
    [Javascript] Coding interview problem: Scheduler functional way
    [Algorithm] Tree: Lowest Common Ancestor
    [NPM] Execute Code from a Remote GitHub Branch with npx
    hdu 4740
    通过网页实现软件的布局
    STL 统计vector容器中指定对象元素出现的次数:count()与count_if()算法
    善待自己生存的空间
    青春散场
  • 原文地址:https://www.cnblogs.com/liusiluandzhangkun/p/8681870.html
Copyright © 2020-2023  润新知