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

  • 相关阅读:
    力扣(LeetCode)验证回文串 个人题解(C++)
    力扣(LeetCode)平方数之和 个人题解
    Exclusive Access 2 UVA
    C语言中指针*p[N], (*P)[N]的区别
    2018年蓝桥杯国赛比赛心得
    2018acm/icpc西安邀请赛比赛心得
    [最小割]Cable TV Network UVA
    Tree Reconstruction UVA
    Twenty Questions UVA
    python中的enumerate 函数(编号的实现方式)
  • 原文地址:https://www.cnblogs.com/liusiluandzhangkun/p/8681870.html
Copyright © 2011-2022 走看看