title: 应用调试(一)strace

date: 2019/1/15 23:35:14

toc: true

编译

#tar -xjf strace-4.5.15.tar.bz2
#cd strace-4.5.15/
#patch -p1 <../strace-fix-arm-bad-syscall.patch
#./configure --host=arm-linux CC=arm-linux-gcc
#make
复制到单板的 /usr/bin
#cp strace /usr/bin/

使用

#insmod dri.ko
# strace -o log.txt ./test /dev/xyz0
first_drv_open=0
first_drv_write=0
# 也可以直接跟踪模块
# strace -o log.txt rmmod dri

可以看到log里面有记录

....
close(3) = 0
open("/dev/xyz0", O_RDWR) = 3
write(3, "\1\0\0\0", 4) = 0
exit_group(0) = ?
....

可以加入-t加入秒的时标,-tt为ms的时标3


04:13:18 execve("./test", ["./test", "/dev/xyz0"], [/* 7 vars */]) = 0
04:13:18 uname({sys="Linux", node="(none)", ...}) = 0
04:13:18 brk(0) = 0x11000
04:13:18 access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
04:13:18 open("/etc/ld.so.cache", O_RDONLY) = -1 ENOENT (No such file or directory)
04:13:18 open("/lib/v4l/half/libc.so.6", O_RDONLY) = -1 ENOENT (No such file or directory)
04:13:18 stat64("/lib/v4l/half", 0xbe83d4e0) = -1 ENOENT (No such file or directory)
04:13:18 open("/lib/v4l/libc.so.6", O_RDONLY) = -1 ENOENT (No such file or directory)
04:13:18 stat64("/lib/v4l", 0xbe83d4e0) = -1 ENOENT (No such file or directory)
04:13:18 open("/lib/half/libc.so.6", O_RDONLY) = -1 ENOENT (No such file or directory)
04:13:18 stat64("/lib/half", 0xbe83d4e0) = -1 ENOENT (No such file or directory)
04:13:18 open("/lib/libc.so.6", O_RDONLY) = 3
04:13:18 read(3, "\177ELF\1\1\1a\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\330o\1\000"..., 512) = 512
04:13:18 fstat64(3, {st_mode=S_IFREG|0755, st_size=1435660, ...}) = 0
04:13:18 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40015000
04:13:18 mmap2(NULL, 1150612, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x4001e000
04:13:18 mprotect(0x40129000, 56980, PROT_NONE) = 0
04:13:18 mmap2(0x40131000, 16384, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x10b) = 0x40131000
04:13:18 mmap2(0x40135000, 7828, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x40135000
04:13:18 close(3) = 0
04:13:18 open("/dev/xyz0", O_RDWR) = 3
04:13:18 write(3, "\1\0\0\0", 4) = 0
04:13:18 exit_group(0) = ?

原理

starce是主进程,他去创建一个子进程去执行我们实际需要的应用程序,应用程序的open等C库的函数调用实际上会触发swi异常,在swi异常程序中,会判断是否是被跟踪的,如果有跟踪的标记,会先告诉父进程,等待父进程记录后再去通知我们实的App

# \arch\arm\kernel\entry-armv.S

/*
* SVC mode handlers
*/
.macro svc_entry
....
#ifdef CONFIG_TRACE_IRQFLAGS
bl trace_hardirqs_off
#endif
...
irq_handler
#ifdef CONFIG_TRACE_IRQFLAGS
tst r0, #PSR_I_BIT
bleq trace_hardirqs_on
#endif

深入文档

https://gitee.com/layty/Jz2440/tree/master/Driver/code/33th-strace/ptrace

应用调试(一)strace的更多相关文章

  1. nginx源码分析--使用GDB调试(strace、 pstack )

    nginx源码分析--使用GDB调试(strace.  pstack ) http://blog.csdn.net/scdxmoe/article/details/49070577

  2. linux程序调试命令strace

    strace命令用法详解: strace常用来跟踪进程执行时的系统调用和所接收的信号. 在Linux世界,进程不能直接访问硬件设备,当进程需要访问硬件设备(比如读取磁盘文件,接收网络数据等等)时,必须 ...

  3. 28、应用调试之strace命令来跟踪系统调用

    strace是个工具,在使用时需要先按照,见韦东山书籍: 1.tar xjf starce-4.5.15.tar.bz2 2.cd strace-4.5.15/ 3.patch -p1 < .. ...

  4. 《Debug Hacks》和调试技巧【转】

    转自:https://blog.csdn.net/sdulibh/article/details/46462529 Debug Hacks 作者为吉冈弘隆.大和一洋.大岩尚宏.安部东洋.吉田俊辅,有中 ...

  5. awk 高级技巧

    netstat -nat |awk '{print $6}'|sort|uniq -c|sort -rn netstat -n | awk '/^tcp/ {++S[$NF]};END {for(a ...

  6. netstat命令详解

    它主要的用法和详解! (netstat -na 命令),本文主要是说Linux下的netstat工具,然后详细说明一下各种网络连接状态. netstat -nat |awk ‘{print $}’|s ...

  7. linux下使用shell查看apache IP访问量

    1.查看TCP连接状态 netstat -nat |awk '{print $6}'|sort|uniq -c|sort -rn netstat -n | awk '/^tcp/ {++S[$NF]} ...

  8. Linux netstat详解

    做计算机管理员,我们都必要了解一下netstat这个命令,它是一个查看网络连接状态的工具,在windows下也默认有这个工具.Netstat命令详解 netstat命令怎样使用 如何关闭TIME_WA ...

  9. LINUX 运维命令

    查看3306端口被什么程序占用 [root@DB13 ~]# lsof -i : COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME mysqld mysql ...

随机推荐

  1. 第一个 java 程序

    java程序的运行机制 JVM实现了跨平台 JDK > JRE > JVM java Development Kit(JDK)包含:JRE,以及增加编译器和调试器等用于程序开发的文件 Ja ...

  2. 转:sql server锁知识及锁应用

    sql server锁(lock)知识及锁应用 提示:这里所摘抄的关于锁的知识有的是不同sql server版本的,对应于特定版本时会有问题. 一 关于锁的基础知识 (一). 为什么要引入锁 当多个用 ...

  3. 浅谈TCP IP协议栈(一)入门知识【转】

    说来惭愧,打算写关于网络方面的知识很久了,结果到今天才正式动笔,好了,废话不多说,写一些自己能看懂的入门知识,对自己来说是一种知识的总结,也希望能帮到一些想了解网络知识的童鞋. 万事开头难,然后中间难 ...

  4. More Moore and More than Moore

    More Moore and More than Moore ——基于硅光电子学探讨摩尔定律的延续和发展 1965年4月,<电子学>杂志第114页上刊载了Intel创始人之一戈登·摩尔(G ...

  5. Redis操作hash

    来自:http://www.cnblogs.com/alex3714/articles/6217453.html Hash操作 hash表现形式上有些像pyhton中的dict,可以存储一组关联性较强 ...

  6. Windows操作系统分类

    Windows主要有桌面版和服务器版.移动版三个版本 桌面版现在主流是WindowsXP.WindowsVista.Windows7.Windows8.Windows10 其中WindowsXP已经被 ...

  7. PSQLException: FATAL: no pg_hba.conf entry for host "127.0.0.1", user "ambari", database "ambari", SSL off

    On your Postgres server, you will need to update your pg_hba.conf file to allow access for the ambar ...

  8. ThreadPoolExecutor解析

    前言:在最新的阿里规范中强制使用ThreadPoolExecutor方式创建线程池,不允许使用Executors,因此有必要对ThreadPoolExecutor进行进一步了解. 1.ThreadPo ...

  9. excel poi导出demo

    最近做了一个excel 导出的demo,是抄写老大的(嘻嘻嘻),现在把demo源码放在这里 链接:https://pan.baidu.com/s/1_xj0hej-1xwX5JF39acEOg 提取码 ...

  10. InvalidOperationException: Unable to resolve service for type 'Microsoft.AspNetCore.Identity.UserManager`1[Microsoft.AspNetCore.Identity.IdentityUser]'

    在新建asp.net core 应用后, 添加了自定义的ApplicationDbContext 和ApplicationUser ,并添加了Identity认证后, 会出现 InvalidOpera ...