调试神器之strace

调试神器之strace

概述


    strace是一个有用的诊断,调试工具。通过追踪程序,可以了解到一个系统和系统调用的很多事情。被跟踪中的每一行都包含系统调用名称,后跟括号中的参数及其返回值。每个系统调用的名称,参数及其返回值都打印在标准错误或用-o选项指定的文件上。

strace 常用参数说明

接下来我列出常用的几个参数并举例说明,

-c 计算每个系统调用的运行时间,调用和错误,并打出报告。 


-p pid使用进程标识pid附加到进程并开始跟踪。


-e trace =signal

    跟踪所有信号相关的系统调用。


-e trace = ipc

    跟踪所有与IPC相关的系统调用。


-e trace = desc

    跟踪所有与文件描述符相关的系统调用。


-e trace =memory

    跟踪所有内存映射相关的系统调用。


-e abbrev = set

    缩写打印大型结构的每个成员的输出。默认是abbrev = all。 -v选项具有abbrev = none的效果。


-e verbose = set

    指定的一组系统调用的解引用结构。默认是verbose = all。


-e raw = set打印指定的一组系统调用的原始未解码参数。


-e signal=set

    只跟踪指定的信号子集。缺省值是signal = all。例如,信号=! SIGIO(或signal =!io)会导致SIGIO信号不被跟踪。


例子一测试Nginx启动过程调用的系统接口

[root@bogon nginx]# strace -c ./sbin/nginx

nginx: [emerg] [ah_shm_zone] g_shm_dict_list push test is ok in /usr/local/nginx//conf/nginx.conf:27

% time     seconds  usecs/call     calls    errors syscall

------ ----------- ----------- --------- --------- ----------------

 29.93    0.000524          22        24         1 open

 14.22    0.000249           6        44           mmap

  9.94    0.000174          29         6           socket

  9.02    0.000158         158         1           clone

  8.85    0.000155           6        24           mprotect

  4.23    0.000074          12         6           munmap

  4.05    0.000071           3        25           close

  3.88    0.000068           4        18           read

  2.80    0.000049          12         4         4 connect

  2.17    0.000038           2        20           fstat

  1.83    0.000032           5         7         1 stat

  1.43    0.000025          13         2           write

  1.37    0.000024           2        14           rt_sigaction

  1.31    0.000023           5         5         5 mkdir

  0.69    0.000012           2         5           brk

  0.63    0.000011           3         4           listen

  0.51    0.000009           5         2           bind

  0.46    0.000008           4         2           pread64

  0.40    0.000007           4         2         2 access

  0.34    0.000006           2         3           getrlimit

  0.29    0.000005           3         2           ioctl

  0.29    0.000005           3         2           setsockopt

  0.29    0.000005           5         1           epoll_create

  0.23    0.000004           2         2           uname

  0.23    0.000004           2         2           fcntl

  0.11    0.000002           2         1           lseek

  0.11    0.000002           2         1           geteuid

  0.11    0.000002           2         1           arch_prctl

  0.11    0.000002           2         1           set_tid_address

  0.11    0.000002           2         1           set_robust_list

  0.06    0.000001           1         1           rt_sigprocmask

  0.00    0.000000           0         1           execve

------ ----------- ----------- --------- --------- ----------------

100.00    0.001751                   234        13 total


使用strace注意事项

    1)如果程序有链接动态库,strace的追踪可能会混乱。

    2)在某些情况下,系统调用将与已记录的行为有所不同或具有不同的名称。 

    3)strace 使用-p 参数时可能有些接口会收到EINTR中断。

参考资料

    https://linux.die.net/man/1/strace 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值